假设implements Comparable<String>接口  要实现public int compareTo(String x) 不过当编译后类型擦除 Comparable里面的方法是 public int compareTo(Object) 这样前后方法并不一样,类里面根本没有覆盖Comparable的方法,这怎么理解?

解决方案 »

  1.   

    如果只是你只是用Comparable<String>,那么就不用覆写public int compareTo(Object)方法,String类原本就实现了这个接口。如果你是Comparable<T>,这要覆写public int compareTo(T o)的方法。如果只实现Comparable没有指定泛型,这默认是Comparable<Object>,则要实现public int compareTo(Object o)。
      

  2.   

    比如:class A implements Comparable<String> {
    }在这个类里面,看到<  >中的内容就会擦除,因为String是泛型参数,编译器肯定会把类A中的所有String擦除!编译器还没那么智能,能知道你compareTO(String)中的String是想保留的还是要擦除的,编译器只会按照约定,看到类型参数就用Object来代替!!而要实现Comparable,就必须实现compareTo(String),擦除后,两个的参数不一致,还会引起多态的问题。所以,根本就没有覆盖!!