当前位置: 代码迷 >> J2SE >> 关于泛型类编译后的代码的迷惑
  详细解决方案

关于泛型类编译后的代码的迷惑

热度:13   发布时间:2016-04-23 20:37:44.0
关于泛型类编译后的代码的疑惑
看了Core Java 讲的泛型类的原始类型会用第一个限定的类型变量来替换,下面是编译前的java文件

public class ArrayTest<T extends Comparable & Serializable> implements Serializable{

public ArrayTest(T first, T second) {
if(first.compareTo(second) <= 0) {
lower = first;
upper = second;
}
}

private T lower;
private T upper;

}


下面是编译后的class文件,我用反编译工具打开

public class ArrayTest<T extends Comparable,  extends Serializable>
  implements Serializable
{
  private T lower;
  private T upper;

  public ArrayTest(T first, T second)
  {
    if (first.compareTo(second) <= 0) {
      this.lower = first;
      this.upper = second;
    }
  }
}


完全是一样的啊,但书中的例子却是

public class ArrayTest  implements Serializable
{
  private Comparable lower;
  private Comparable upper;

  public ArrayTest(Comparable first, Comparable second)
  {
    if (first.compareTo(second) <= 0) {
      this.lower = first;
      this.upper = second;
    }
  }
}

我的jdk是1.7,是不是因为版本高了,已经把这个问题修复了,jvm能够识别泛型了。
------解决方案--------------------
有可能是版本的问题。
------解决方案--------------------
我觉得有可能是版本的因素,你可以用不同的版本试验一下,看看编译并反编译的结果。
另外,书上很可能是基于1.5来写的,那时java刚刚引入泛型,还不很完善。而且书上很可能说的意思是“相当于”,而不是“就是”。
  相关解决方案