Use obj2.cast(obj1),它强制转换obj1为由 表示的类或接口obj2,obj1如果obj1可分配给该类型T(请注意,null可分配给任何类型),则返回,否则抛出ClassCastException。
我们对转换的结果不感兴趣,因为静态已知的类型obj1已经是Tand 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
//...
}