我有两个类如下:
// 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/