java - 如何使用有界类型参数扩展泛型类
问题描述
我正在尝试使用另一个具有类型参数的泛型类扩展一个具有有界类型参数的泛型类,该类型参数遵循超泛型的类型参数。
具有上限类型参数的超级泛型
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 泛型中实现此场景?
解决方案
您的LionCage
类不必是通用的,但它必须在子句中传递一个具体的类型参数 ( Lion
) :extends
public class LionCage extends Cage<Lion> {
@Override
public void add(Lion l) {
cage.add(l);
}
}
推荐阅读
- elasticsearch - 弹性搜索模式匹配未按预期工作
- java - 如何安排骆驼路线在特定时间开始并每天运行一次
- java - 错误 LNK2019:构建 hadoop 3.2.1 时引用了未解析的外部符号 _imp_JNI_CreateJavaVM12
- github - 为 GitHub 项目页面和用户页面使用相同的主题
- asp.net - IIS 在同一端口上处理 api 和网站
- flutter - 为什么我的复选框不起作用?即使在设置 setState 之后
- python-3.x - 如何在python中下载带有base64内容的imap电子邮件附件?
- machine-learning - 我有这个错误“输入 0 与层 lstm 不兼容预期 ndim=3 发现 ndim=5”
- ffmpeg - 为 FFMPEG 输出文件名附加 GUID
- php - 使用数组从不同的表中调用名称