进行接口中方法重写时,因为使用泛型,在泛型擦除时出现方法重写失败
来源:3-2 栈的基本实现
慕粉1469062813
2020-03-10
在看完这一节课程,自己实现栈时,重写方法忽然error,报错如下图使用IDEA快捷键自动重写方法时,会将传入参数修改成Object类型,不报错
接口中的抽象push方法传入参数使用的是泛型如图
按图二自动重写方法出现错误,因为addLast方法需要传入的是一个泛型的参数,而实际传入的是一个Object类型的参数,但如果改成图一,传入泛型参数则编译失败
在GitHub上下载了老师的代码实现的时候,也出现同样的问题,最后的解决方法是在使用addLast方法传参时,将Object类型的参数强转为泛型参数,如下图
使用强转的解决方法在后续测试中未出现问题,但还是想问下老师,我这里出现方法重写失败的原因,希望老师可以帮忙解答一下。
写回答
1回答
-
error 的意思是编译无法通过吗?我在我的环境下测试课程源码,没有这个问题。
请确认你的 ArrayStack 的类声明是正确的(包含了泛型):
public class ArrayStack<E> implements Stack<E>
同时也确认你的 Stack 接口也正确地包含了泛型:
public interface Stack<E>
尝试一下完全使用课程的工程文件,在你的环境下运行,看看是否有同样的问题?
继续加油!:)
022020-03-11
相似问题