[英]Java generics unchecked cast - Possible to check at runtime?
// @SuppressWarnings("unchecked")
private <T> T extractResult(Continuation continuation) {
Object result = continuation.getAttribute("result");
return (T) result;
}
是否(在运行时)可以验证result
可以转换为T
吗?
不可以。要在运行时检查,您需要一个类的实例,以便您可以使用isAssignableFrom 。 由于类型擦除,您无法使用T
访问此内容。
不在此方法内。 与T
相关的所有类型信息都被编译器擦除。
在运行时是可能的,但您需要一个泛型类型标记。 通常你将它传递给泛型类型的构造函数
class SomeGeneric<T>
private Class<T> token;
public SomeGeneric(Class<T> token) {
this.token=token;
}
然后在您的方法中,您可以在运行时检查它
return token.cast(result) // throws ClassCastException
类型擦除将在运行时用Object
替换T
类型信息在运行时将不存在,因此您无法检查类型。
您可以通过正式尝试捕获 ClassCastException 来检查它。 不过,它不会使警告消失。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.