如何在接口中引用泛型参数
public class ComparablePet implements Comparable<ComparablePet>
//使用了泛型参数对接口进行了窄化,导致子类无法重置同一接口
{
public int compareTo(ComparablePet arg)
{
return 0;
}
}
class Hamster extends ComparablePet implements Comparable<ComparablePet>
//实现同一泛型参数的接口是允许的,可以理解为Comparable已经确定了ComparablePet作为其唯一的类型参数
{
public int compareTo(ComparablePet arg)
{
return 0;
}
}
class Gecko extends ComparablePet
//甚至不继承接口也是可行的
{
public int comparableTo(ComparablePet arg)
{
return 0;
}
}
在看看下面的报错
class Cat extends ComparablePet implements Comparable<Cat>
//报错,因为Cat类试图重置新的接口类型
{
public int compareTo(Cat arg)
{
return 0;
}
}
class Dog extends ComparablePet implements Comparable
//报错,因为Cat类试图重置新的接口类型
{
public int compareTo(Cat arg)
{
return 0;
}
}
可以看到尝试继承同一个接口的不同泛型参数会导致错误,因为不允许继承同一个接口的不同泛型参数,下面的代码表示,即使不带参数,也是不允许的,因为这也相当于在重写之前继承的接口