【发布时间】:2016-09-19 03:54:23
【问题描述】:
public class Test {
public static void main(String[] args) throws ClassNotFoundException {
new Test().f("dfffg"); // it is running perfectly
new Test().f(1, 1); // it is giving ambiguity
}
public void f(int a,long b){
System.out.println("in int and long");
}
public void f(long a,int b){
System.out.println("in long and int");
}
public void f(String s) {
System.out.println("in String");
}
public void f(StringBuffer o) {
System.out.println("in String bufer");
}
public void f(Object o){
System.out.println("in object");
}
}
当我执行此new Test().f("dfffg"); 时,它运行良好,尽管我们有 StringBuffer 和 Object 作为参数的重载方法
虽然 f(1,1) 给出了歧义,但我可以理解。
【问题讨论】:
-
如果没有找到匹配的数据类型,int 可以提升为 long。这会导致功能模糊。如果你想同时使用这两个函数,你可以使用 f(int... a) 和 f(long... a) 之类的函数。这些不是您的问题的解决方案,但可以帮助解决歧义。
标签: java string object stringbuffer