public class Program {
private static <Program> void foo(Program x){
System.out.println(x+"-->1");
}
private static void foo(final int i){
System.out.println(i+"-->2");
}
public static void main(String[] args) {
Integer i = 10;
foo(i);
}
}
输出结果为:
10-->1
我找不到任何关于这个话题的相关讨论。然而,另一个主题的答案让我有点困惑:- Return Type of Java Generic Methods
根据他们的说法,通用<Program>
与返回类型无关,但在我的例子中,如果我稍微修改一下这个程序,如下所示,那么输出就不同了。
public class Program {
private static <Integer> void foo(Program x){
System.out.println(x+"-->1");
}
private static void foo(final int i){
System.out.println(i+"-->2");
}
public static void main(String[] args) {
Integer i = 10;
foo(i);
}
}
输出:
10-->2
我使用的是JDK1.7
发布于 2017-05-10 16:45:03
在第一个示例中,您实际上并没有指定Program
类型的参数,它是一个泛型。该类型参数与名为Program
的类无关。你会得到同样的结果,如果你犯了这样的输入错误:
public class Program {
private static <Programmmm> void foo(Programmmm x){
System.out.println(x+"-->1");
}
private static void foo(final int i){
System.out.println(i+"-->2");
}
public static void main(String[] args) {
Integer i = 10;
foo(i);
}
}
然而,在你的第二个例子中,参数的字面意思是Program
类型,所以当作为foo(10);
调用时,它不匹配,并且你从第二个方法得到结果。
https://stackoverflow.com/questions/43887401
复制相似问题