Java中如何实现泛型接口/抽象类?解决Deque子类泛型冲突
解决泛型Deque接口实现时方法参数变为Object的问题
- 第一步:定义泛型Deque接口,在接口级别声明泛型参数
Item,并在所有指定方法中使用该泛型类型作为参数/返回值类型:
public interface Deque<Item> { void addFirst(Item item); void addLast(Item item); // 其余6个指定方法也统一用Item作为泛型类型 }
- 第二步:让你的实现类正确绑定泛型接口,确保类的泛型参数与接口泛型参数对应,重写方法时参数类型会自动匹配为
Item:
以LinkedListDeque为例:
public class LinkedListDeque<Item> implements Deque<Item> { @Override public void addFirst(Item item) { // 你的实现逻辑 } @Override public void addLast(Item item) { // 你的实现逻辑 } // 其余方法的重写实现 }
ArrayDeque按照相同方式实现即可。
问题根源
之前参数变为Object的核心原因是:你的Deque接口未声明泛型,或接口内方法直接使用Object而非泛型参数。只要接口本身是泛型化的,且实现类在声明时明确指定接口泛型参数与自身泛型参数一致,重写方法时就会自动使用正确的Item类型,而非Object。
额外注意点
- 重写方法时必须加上
@Override注解,编译器会帮你校验方法签名是否匹配,避免因参数类型错误导致“重载而非重写”的问题。 - 泛型参数名称(如
Item)仅为标识符,只要接口与实现类的泛型参数对应即可,统一命名能进一步提升代码可读性,符合你的需求。
内容的提问来源于stack exchange,提问作者learningtoc0d3
相关产品推荐
相关产品推荐

