泛型Node类调用抽象方法提示未声明,如何修复?
问题原因与修复方案
问题根源
你定义Node类时写的<ContentClass>是泛型参数的名称,不是指你之前创建的抽象类ContentClass。这相当于把泛型参数命名成了和抽象类同名的标识符,编译器会把它当作无任何约束的泛型类型,自然找不到getSortId()和getClassType()方法。
修复步骤
把Node类改成带泛型约束的形式,让泛型参数继承自你的抽象类ContentClass,同时换个泛型参数名避免冲突:
修复后的Node类代码
public class Node<T extends ContentClass> { private T content; private Node<T> left; private Node<T> right; public Node(Node<T> l, Node<T> r, T c) { content = c; left = l; right = r; } public String getNodeSortId() { return content.getSortId(); } public String getNodeType() { return content.getClassType(); } public T getContent() { return content; } public Node<T> getLeft() { return left; } public Node<T> getRight() { return right; } }
修改说明
- 泛型定义改为
<T extends ContentClass>:明确T必须是ContentClass或其子类,编译器就能识别content拥有抽象类中定义的所有方法。 - 所有Node类型的成员变量、方法返回类型、构造方法参数都加上
<T>约束,保证类型一致性。
需求适配
修改完成后,后续创建的任意ContentClass子类实例都可以传入Node类中使用,完全满足你“Node类接收任意ContentClass类型实例”的需求。
内容的提问来源于stack exchange,提问作者Emily HlÍf Carozzini
相关产品推荐
相关产品推荐

