关于java中的泛型转换
在Java中,大家都知道整数不能转换为字符串,这在编译时是一个错误 现在,对于这个一般情况关于java中的泛型转换,java,generics,types,casting,Java,Generics,Types,Casting,在Java中,大家都知道整数不能转换为字符串,这在编译时是一个错误 现在,对于这个一般情况 public <T> T cast(Object o) { return (T) Integer.class.cast(o);//cast Integer to T } void method1() { String q = cast("q"); //T is String }
public <T> T cast(Object o) {
return (T) Integer.class.cast(o);//cast Integer to T
}
void method1() {
String q = cast("q"); //T is String
}
publictcast(对象o){
返回(T)Integer.class.cast(o);//将整数转换为T
}
void method1(){
字符串q=cast(“q”);//T是字符串
}
我只是不明白为什么在这种情况下,java不能在编译时警告您整数被转换为字符串。为什么?据我所知,类型擦除是在编译之后发生的
编辑:我只是认为编译器有类型推断来知道T是字符串,所以整数不能转换为。但显然不是这样。
public <T> T cast(Object o) {
return (T) Integer.class.cast(o);//cast Integer to T
}
然后您将非常容易地得到编译错误,因为CharSequence
和Integer
不在同一继承层次结构中,因此不兼容
在这种特定情况下,即使没有转换到T
,也会出现编译错误。这是因为
AnyTypeName.class
始终返回
类
,并且类#cast
使用泛型类型。在这种情况下,它将返回一个整数
,而整数
不能转换为T
,更确切地说,我的问题是编译器有类型推断来知道T是字符串,因此在这个意义上,整数不能转换为字符串。但显然出了问题。方法绑定是动态的。编译cast(“q”)
时,编译器只会查看方法签名,而不会查看方法内部。@superChing它只知道该特定调用的String
。其他调用呢?
AnyTypeName.class