Java 类型安全转换问题

标签 java casting

我有两个类如下:

// Jackson annotated-class
public class User {

}

和:

// Jackson annotated-class
public class ResponseWrapper<ResultType> {
    ...
}

在某个操作过程中,我需要进行一次转换。

  • 案例一:

    ResponseWrapper<User> r = (ResponseWrapper<User>) result.getResult();
    

    警告: Type safety: Unchecked cast from Object to ResponseWrapper<User>

  • 案例 2:

    Object o = result.getResult();
    if ( o instanceof ReaponseWrapper<?> ) {
        ResponseWrapper<?> r = (ResponseWrapper<?>) result.getResult(); // OK
    }
    

    没有警告

  • 案例三

    Object o = result.getResult();
    if ( o instanceof ResponseWrapper ) {
        ResponseWrapper<User> r = (ResponseWrapper<User>) result.getResult();
    }
    

    警告(再次):Type safety: Unchecked cast from Object to ResponseWrapper<User>

如何从 Object 执行类型安全转换至 ResponseWrapper<User>

最佳答案

你不能。泛型是一种编译时帮助。在运行时,Java 使用类型删除。因此,Java 无法在运行时检查您的包装器是否为 ResponseWrapper<Foo>。或 ResponseWrapper<Bar> .它只能检查它是否是 ResponseWrapper .这就是您收到此类警告的原因。

关于Java 类型安全转换问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26547035/

相关文章:

java - 使用java程序添加环境变量,并能够在我从我的电脑打开环境选项卡时看到

swift - 如何转换 Swift Bool? -> 字符串?

c++ - 如何使模板仅通过第一个参数解析类型?

actionscript-3 - ActionScript 3 : Why would you omit the new keyword when instantiating a custom eventDispatcher?

java - 理解 Java 的 protected 修饰符

java - 身份验证过滤器无法正确识别身份验证

java - 如何使用 mongodb 的 Java 驱动程序将 $comment 添加到不同或聚合调用?

java - BlockCopy C# to java - 有什么办法可以做到这一点

c# - 为不可修改的类型实现类似 IConvertible 的功能

c++ - 什么时候使用 reinterpret_cast 而不违反严格的别名规则?