Use obj2.cast(obj1)
,它强制转换obj1
为由 表示的类或接口obj2
,obj1
如果obj1
可分配给该类型T
(请注意,null
可分配给任何类型),则返回,否则抛出ClassCastException
。
我们对转换的结果不感兴趣,因为静态已知的类型obj1
已经是T
and obj2.cast(obj1)==obj1
(如果转换成功)。但是,如果强制转换失败,则会抛出早期异常。
例子:
public <T> void readData(T obj1, Class<T> obj2){
obj2.cast(obj1);
//...
}
以下调用(从Class<?>
to有未经检查的强制转换Class<String>
)将失败:
readData("Hello",(Class<String>)(Class<?>)Integer.class);
该方法cast
对于替换未经检查的强制转换也很有用,例如:
public <T> void readData(Object obj1, Class<T> obj2){
T t = (T)obj1;//BAD: unchecked cast
//...
}
public <T> void readData(Object obj1, Class<T> obj2){
T t = obj2.cast(obj1());//GOOD: ClassCastException if the cast fails
//...
}