假设我有这样一个类:
class ParameterizedType<T>{
public boolean equals(Object o){
if (ParameterizedType<T>.class.isInstance(o)){
ParameterizedType<T> other = (ParameterizedType<T>) o;
return this.toString() == other.toString();
}
return false;
}
}
我可以用这种方法从 eclipse 得到两个不同的警告。
ParameterizedType<T>.class
语法不正确(ParameterizedType<T>)
o 是未经检查的转换
如何解决这个问题?
最佳答案
-
ParameterizedType<T>.class
语法不正确
这是因为 .class
你指的是 .class
值在运行时并且由于泛型是 Java 的编译时功能并且类型参数被删除并替换为实际类型,因此该语句在运行时和 <T>
没有意义是完全多余的。
请注意,同样的规则适用于 instanceof
运算符(即你不能做 if (something instanceof SomeGenericClass<T>)
)
-
(ParameterizedType<T>)
o 是未经检查的转换
无法比较 Object
至 ParameterizedType
除非沮丧。 IDE 正确地建议转换未被选中,但为了比较实例,您必须在某些时候向下转换。在这种情况下,添加一个 @SuppressWarnings("unchecked")
上面的方法就可以了。
关于java - 在java中使用类型参数进行转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31518843/