2015-07-20 147 views
3

类型参数说我有一类这样的:铸造在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; 
    } 
} 

我可以在这样的方法从日食两个不同的警告。

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

  2. (ParameterizedType<T>) o是一个未经检查的投

怎会解决此得到什么?

+0

@ kocko有正确的信息。为了解决这个问题,你需要使用@SuppressWarnings(“unchecked”)。将鼠标悬停在警告上时,Eclipse会提供有用的提示。通过这样做,你告诉自己和其他开发人员,是的,我承认这是没有检查的,但我需要这样做。 – markbernard

+0

你想通过比较字符串引用来实现equals吗?无论如何,通过引用'toString'方法来计算'equals'是个坏习惯,但是将字符串与'=='比较是一个[严重错误](http://stackoverflow.com/questions/513832/how-do-i -compare串式的Java)。 – RealSkeptic

回答

6
  1. ParameterizedType<T>.class不是语法正确

这样做的原因是,随着.class您提到在运行时由于仿制药的.class值是Java的编译时间功能和类型参数获得擦除并替换为实际类型,那么在运行系统中该语句没有意义,并且<T>完全是多余的。

注意的是,同样的规则适用于instanceof运营商(即你不能做if (something instanceof SomeGenericClass<T>)

  • (ParameterizedType<T>) o是一个未经检查的投
  • 有没有除非向下转换,否则将ObjectParameterizedType进行比较。 IDE正确地表明该演员阵容没有被选中,但为了比较这些实例,你必须在某个时刻向下倾倒。在这种情况下,在该方法之上添加@SuppressWarnings("unchecked")将会很好。

    请注意,Strings in Java should not be compared with ==