【发布时间】:2012-04-13 07:08:15
【问题描述】:
下面的代码怎么可能编译?据我所见,count 函数是用两种不同的类型调用的,但编译器并没有抱怨,而是愉快地编译了这段代码。
public class Test {
public static <T> int count(T[] x,T y){
int count = 0;
for(int i=0; i < x.length; i++){
if(x[i] == y) count ++;
}
return count;
}
public static void main(String[] args) {
Integer [] data = {1,2,3,1,4};
String value = "1";
int r =count(data,value);
System.out.println( r + " - " + value);
}
}
【问题讨论】:
-
你必须明白Java中的泛型只是一个视觉技巧。通过编译器,类型被删除为 Object。谷歌“Java 类型擦除”来查找脏细节。
-
确实如此。我或多或少知道发生了什么,但我想知道为什么。我现在意识到,正如你所说,它(泛型)“只是一个视觉技巧”(我什至称之为肮脏)。
标签: java generics compilation compiler-errors