如何使用有界类型参数扩展通用类

时间:2018-06-20 08:43:38

标签: java generics collections types

我正在尝试将具有受限类型参数的泛型类扩展为另一个具有类型参数的泛型类,该泛型继超级泛型的类型化参数之后。

  

具有上限类型参数的超级泛型

public abstract class Cage<T extends Animal> { 
    protected Set<T> cage = new HashSet<T>();
    public abstract void add(T animal);
    public void showAnimals() {
        System.out.println(cage);
    }
}

我要使用特定的有界类型创建的泛型类,例如狮子

我尝试了下面的代码,但出现错误类型参数Lion隐藏令牌“ extends”上的Lion类型语法错误

对于LionCage类中的add()方法,我得到错误 LionCage类型的add(Lion)方法必须重写或实现超类型方法

  

LionCage类适用于Cage<Lion extends Animal>

public class LionCage<Lion extends Animal> extends Cage<T extends Animal> {
    @Override
    public void add(Lion l) {
        cage.add(l);

    }
}

我的Animal类及其子类Lion,Rat等在Animal.java中定义

public class Animal {
    public String toString() {
        return getClass().getSimpleName();
    }   

}

class Rat extends Animal {}
class Lion extends Animal {}

由于我遇到了错误,我猜测我所遵循的方法可能不正确。在那种情况下,是否有任何标准方法可以在Java泛型中实现此方案?

1 个答案:

答案 0 :(得分:6)

您的LionCage类不必是通用的,但必须在Lion子句中传递一个具体的类型参数(extends):

public class LionCage extends Cage<Lion> {
    @Override
    public void add(Lion l) {
        cage.add(l);

    }
}