Java泛型未检查强制转换-可以在运行时检查吗? /@SuppressWarnings(“未选中”) 私有T提取结果(续){ 对象结果=continuation.getAttribute(“结果”); 返回(T)结果; }
(在运行时)是否可以验证Java泛型未检查强制转换-可以在运行时检查吗? /@SuppressWarnings(“未选中”) 私有T提取结果(续){ 对象结果=continuation.getAttribute(“结果”); 返回(T)结果; },java,generics,casting,Java,Generics,Casting,(在运行时)是否可以验证结果是否可以转换为T?不在此方法中。编译器会删除与T相关的所有类型信息。否。要在运行时进行检查,您需要一个类的实例,以便可以使用。由于类型擦除,您无法使用t访问此文件。类型擦除将在运行时用对象替换t。类型信息在运行时将不存在,因此您无法对照该类型进行检查。在运行时可以这样做,但您需要一个泛型类型标记。通常将其传递到泛型类型的构造函数中 // @SuppressWarnings("unchecked") private <T> T extractResult(C
结果
是否可以转换为T
?不在此方法中。编译器会删除与T
相关的所有类型信息。否。要在运行时进行检查,您需要一个类的实例,以便可以使用。由于类型擦除,您无法使用t
访问此文件。类型擦除将在运行时用对象
替换t
。类型信息在运行时将不存在,因此您无法对照该类型进行检查。在运行时可以这样做,但您需要一个泛型类型标记。通常将其传递到泛型类型的构造函数中
// @SuppressWarnings("unchecked")
private <T> T extractResult(Continuation continuation) {
Object result = continuation.getAttribute("result");
return (T) result;
}
您可以通过正式尝试捕获ClassCastException来检查它。 然而,这并不能使警告消失
class SomeGeneric<T>
private Class<T> token;
public SomeGeneric(Class<T> token) {
this.token=token;
}
return token.cast(result) // throws ClassCastException