为什么编译器没有停止编写此类代码并抛出运行时错误。
public class GenericTest<T,S> {
T x;
S y;
public GenericTest(T x,S y) {
this.x=x;
this.y=y;
}
void display(){
System.out.println("Display->"+((int)x)+y); //why does it throw error runtime instead of compile time?
}
}
调用时显然会失败。
public class Test {
public static void main(String[] args) {
GenericTest<String, String> s=new GenericTest<String, String>("Hello","World");
s.display();
}
}
为什么允许为泛型类型输入强制转换:
System.out.println("Display->"+((int)x)+y);
答案 0 :(得分:3)
由于
T
是一个有效的代码,它将产生一个输出。
此外,S
和Object
是无遮盖的泛型,它们相当于Object
。
Integer
可以投放到Object o = ...;
Integer i = (Integer) o;
。
class GenericTest {
Object x;
Object y;
public GenericTest(Object x,Object y) {
this.x=x;
this.y=y;
}
void display(){
System.out.println("Display->"+((int)x)+y);
}
}
此外,自Java 7起,object can be cast to int
。因此没有编译错误。
您的代码等同于
id