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

som*_*rti 1 java generics collections types

我试图扩展一个带有有界类型参数的Generic类和另一个带有typed参数的泛型类,该类遵循超级泛型的类型参数.

具有上限类型参数的超级通用

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我想用特定的有界类型创建的泛型类,例如Lion

我尝试了下面的代码,但是我收到一个错误类型参数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);

    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

}

class Rat extends Animal {}
class Lion extends Animal {}
Run Code Online (Sandbox Code Playgroud)

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

ern*_*t_k 6

您的LionCage类不必是通用的,但它必须Lionextends子句中传递具体类型paramter():

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

    }
}
Run Code Online (Sandbox Code Playgroud)