// @SuppressWarnings("unchecked")
private <T> T extractResult(Continuation continuation) {
Object result = continuation.getAttribute("result");
return (T) result;
}
是否(在运行时)可以验证result
是否可以投放到T
?
答案 0 :(得分:3)
不在此方法范围内。与T
相关的所有类型信息都将被编译器删除。
答案 1 :(得分:3)
可以在运行时使用,但是您需要一个泛型类型令牌。通常你将它传递给泛型类型的构造函数
class SomeGeneric<T>
private Class<T> token;
public SomeGeneric(Class<T> token) {
this.token=token;
}
然后在您的方法中,您可以在运行时检查它
return token.cast(result) // throws ClassCastException
答案 2 :(得分:2)
没有。要在运行时检查,您需要一个类的实例,以便可以使用isAssignableFrom。由于类型擦除,您无法使用T
访问此内容。
答案 3 :(得分:0)
类型擦除将在运行时用T
替换Object
。运行时将缺少类型信息,因此您无法检查类型。
答案 4 :(得分:-1)
您可以通过正式尝试捕获ClassCastException进行检查。 但这不会使警告消失。