首页 > 解决方案 > 如何使用有界类型参数扩展泛型类

问题描述

我正在尝试使用另一个具有类型参数的泛型类扩展一个具有有界类型参数的泛型类,该类型参数遵循超泛型的类型参数。

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

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

我尝试了下面的代码,但我收到一个错误类型参数 Lion 正在隐藏类型 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 泛型中实现此场景?

标签: javagenericscollectionstypes

解决方案


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

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

    }
}

推荐阅读