繁体   English   中英

Java 泛型未经检查的强制转换 - 可以在运行时检查吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM