java - 在java中使用类型参数进行转换

标签 java generics

假设我有这样一个类:

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. 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 ==

关于java - 在java中使用类型参数进行转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31518843/

相关文章:

java - 获取 POST 数据 Play Framework (Java)

c# - C# 可以在 Java (Meta-inf/service) 中做类似 SPI 的事情吗?

c# - 在 C# 中调用泛型子类中的重写方法

java - 类中的泛型和方法数量

c# - UWP 应用程序中的自引用泛型类型约束和 XAML

android - 为什么我不能在Kotlin中将Class类型用作通用参数?

java - 调试 : android. view.InflateException

java - 强制将JRE系统库添加到android项目中

java - Glassfish Server4 最大池大小和最长等待时间

arrays - 尝试用 Argo 解码数组