内部类泛型问题:类型不兼容报错原因咨询
解决你的类型不兼容报错问题
嘿,我一眼就揪出你代码里的问题了——内部Node类重复声明了泛型参数<T>,这直接遮蔽了外部类的泛型参数,导致类型不匹配!
问题根源分析
你的外部类PrependLinearListImpl<T>已经定义了泛型参数T,但你在内部Node类里又写了private class Node<T>。这里的<T>是一个全新的、独立的泛型参数,和外部类的T完全不是同一个类型。
所以当你在Node构造器里执行this.tail = first;时:
first是外部类的Node<外部类T>类型tail是内部Node类自己的Node<内部类T>类型
这两个类型本质上是不兼容的,编译器自然会抛出类型不兼容的报错。
修正后的代码
只需要去掉内部Node类的泛型声明即可,它会自动继承外部类的泛型参数:
public class PrependLinearListImpl<T>{ private Node first; private class Node { private T head; private Node tail; Node(T head) { this.head = head; this.tail = first; first = this; } } }
额外提醒
对于非静态内部类来说,它默认可以访问外部类的所有泛型参数,完全不需要重复声明。这种泛型参数遮蔽的问题很容易在嵌套类中踩坑,以后写代码的时候多留意这一点哦~
内容的提问来源于stack exchange,提问作者Delsh
相关产品推荐
相关产品推荐

