进行接口中方法重写时,因为使用泛型,在泛型擦除时出现方法重写失败

来源:3-2 栈的基本实现

慕粉1469062813

2020-03-10

在看完这一节课程,自己实现栈时,重写方法忽然error,报错如下图图一使用IDEA快捷键自动重写方法时,会将传入参数修改成Object类型,不报错
接口中的抽象push方法传入参数使用的是泛型如图
图片描述
按图二自动重写方法出现错误,因为addLast方法需要传入的是一个泛型的参数,而实际传入的是一个Object类型的参数,但如果改成图一,传入泛型参数则编译失败
在GitHub上下载了老师的代码实现的时候,也出现同样的问题,最后的解决方法是在使用addLast方法传参时,将Object类型的参数强转为泛型参数,如下图图片描述
使用强转的解决方法在后续测试中未出现问题,但还是想问下老师,我这里出现方法重写失败的原因,希望老师可以帮忙解答一下。

写回答

1回答

liuyubobobo

2020-03-11

error 的意思是编译无法通过吗?我在我的环境下测试课程源码,没有这个问题。


请确认你的 ArrayStack 的类声明是正确的(包含了泛型):

public class ArrayStack<E> implements Stack<E>


同时也确认你的 Stack 接口也正确地包含了泛型:

public interface Stack<E>


尝试一下完全使用课程的工程文件,在你的环境下运行,看看是否有同样的问题?


继续加油!:)

0
2
慕粉1469062813
使用课程的工程文件没有出现问题,可能发生了什么奇怪的错误吧,谢谢老师
2020-03-11
共2条回复

玩转数据结构

动态数组/栈/队列/链表/BST/堆/线段树/Trie/并查集/AVL/红黑树…

6221 学习 · 1704 问题

查看课程