实现Java Collection接口时重写retainAll()方法仍触发编译错误的问题求助
实现Java Collection接口时重写retainAll()方法仍触发编译错误的问题求助
嘿,我刚碰到过类似的坑,来帮你捋一捋问题出在哪!
首先看你遇到的编译错误:
ImplementCollectionInterface is not abstract and does not override abstract method retainAll(Collection) in Collection
你说已经重写了retainAll(),但看你贴的代码片段里方法签名写到public boolean retainAll(Collectio...——这明显是拼写错误啊!Collection少了最后一个字母n,变成Collectio了,这就导致编译器完全识别不到这是对接口方法的重写,自然会报错说你没实现这个抽象方法。
除了这个拼写问题,还有几个细节要注意:
- 你的类是泛型类
ImplementCollectionInterface<E>,但实现的是原始类型的Collection接口,建议改成实现泛型版本的Collection<E>,这样类型更安全,也能避免不少因为原始类型导致的签名匹配问题,比如类声明改成:class ImplementCollectionInterface<E> implements Collection<E> { // 类内容 } - 重写接口方法时,一定要加上
@Override注解!这个注解能让编译器帮你严格检查方法签名是否完全匹配接口定义,比如参数类型、返回值、方法名有没有写错,只要不匹配编译器会立刻提示,能帮你省超多排查时间。 - 最后别忘了,
Collection接口里可不只retainAll()这一个抽象方法,像add()、size()、isEmpty()、iterator()这些你都得实现,要么写完具体逻辑,要么把你的类改成abstract类,不然编译器还会报其他方法未实现的错误。
给你个修正后的代码片段参考:
import java.util.*; class ImplementCollectionInterface<E> implements Collection<E> { E[] data; private int size; @Override public boolean retainAll(Collection<?> c) { // 暂时先返回false占位,后续再补具体逻辑 return false; } // 必须实现的其他Collection方法示例 @Override public int size() { return size; } @Override public boolean isEmpty() { return size == 0; } // 剩下的add、contains、iterator等方法也需要逐一实现 }
这样改完之后,应该就能解决你现在的编译错误了!
备注:内容来源于stack exchange,提问作者Prickriti
相关产品推荐
相关产品推荐

