首页 文章

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

提问于
浏览
1

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

Super Generic with upper bounded type parameter

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 回答

  • 6

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

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

相关问题