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);
}
}
,输出是:Java中的泛型如何适用于以下程序?
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
在你的第二个例子中,只有第二个版本的'foo()'有一个签名,它可以匹配你在'main()'中调用的内容。在第一个例子中,在拆箱之前必须有一个优先规则匹配对通用函数的“Integer”调用,并调用替代方法。 –
您正在此行上定义一个新的泛型类型参数'Program':'private static void foo(Program x){'。该类型参数与名为'Program'的类无关。当您将类型参数的名称更改为“整数”时,参数“程序x”突然有一种类型的实际类“程序”。课程:不要将您的类型参数命名为存在的实际类。 –
marstran
如果您的泛型参数名称遵循拼写为单个大写字母的约定,那么您的代码将更容易遵循。无论如何,当你将它们命名为具体类型时,它是毫无希望的混淆,更不用说它是一个范围。从您的类型名称中分离您的泛型参数名称! –