java类型安全:未选中的从对象强制转换
我试图将一个对象投射到我的Action类,但它会导致一个警告:
Type safety: Unchecked cast from Object to Action<ClientInterface>
Action<ClientInterface> action = null;
try {
Object o = c.newInstance();
if (o instanceof Action<?>) {
action = (Action<ClientInterface>) o;
} else {
// TODO 2 Auto-generated catch block
throw new InstantiationException();
}
[...]
谢谢你的帮助
# 1 楼答案
和往常一样,乔恩·斯基特是对的
详细说明他回答中不容易的部分:
给定
你可以写:
这消除了强制转换和警告,但代价是引入了非泛型类型,因此可以使用
.class
来获得足够准确的Class
对象# 2 楼答案
由于擦除,您丢失了类型信息(即,参数化类型已被擦除),因此出现警告。除了清理周围的代码,以便更频繁地使用泛型之外,您什么也做不了,这样您就可以传递泛型类型信息并避免强制转换
# 3 楼答案
别担心。这是因为Java编译器无法知道对象的真实类型