有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java中带类型参数的泛型转换

假设我有这样一门课:

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获得两个不同的警告

  1. ParameterizedType<T>.class在语法上不正确

  2. (ParameterizedType<T>)o是未经检查的演员阵容

你怎么能避开这个


共 (1) 个答案

  1. # 1 楼答案

    1. ParameterizedType<T>.class在语法上不正确

    这是因为.class在运行时指的是.class值,因为泛型是Java的编译时特性,类型参数被删除并替换为实际类型,所以语句在运行时没有意义,<T>是完全冗余的

    请注意,相同的规则适用于instanceof运算符(即,您不能执行if (something instanceof SomeGenericClass<T>)

    1. (ParameterizedType<T>)o是未经检查的演员阵容

    除非向下投射,否则无法将ObjectParameterizedType进行比较。IDE正确地建议取消对实例的强制转换,但是为了比较实例,必须在某个时候进行向下转换。在这种情况下,在方法上方添加@SuppressWarnings("unchecked")就可以了

    还请注意Strings in Java should not be compared with ^{}