看了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刚刚引入泛型,还不很完善。而且书上很可能说的意思是“相当于”,而不是“就是”。