【发布时间】:2014-10-11 19:46:44
【问题描述】:
我尝试扩展 EnumSet 以在 Eclipse 中实现 Comparable。然而,我从一开始就充满了错误。这是我的开始:
package sets;
import java.util.EnumSet;
enum Suits{
SPADE, DIAMOND, CLUB, HEART;
}
class ExtendedEnumSet extends EnumSet<Suits> implements Comparable<Suits> {
}
(问题1)定义显式构造函数
它立即通知我:Implicit super constructor EnumSet<Suits>() is undefined for default constructor. Must define an explicit constructor. 所以,我按照快速修复并添加了以下构造函数:
ExtendedEnumSet(Class<Suits> finalArg0, Enum[] finalArg1) {
super(finalArg0, finalArg1);
// TODO Auto-generated constructor stub
}
...然后它通知我:The constructor EnumSet<Suits>(Class<E>, Enum[]) is not visible。我已经尝试更改此类和此构造函数的访问修饰符,但无济于事。
(问题 2)重写抽象方法
下一个问题是当我决定继续并修复 Eclipse 报告的下一个错误时:The type ExtendedEnumSet must implement the inherited abstract method AbstractCollection<Suits>.iterator()。当然,这只是冰山一角。我再次使用快速修复 (add unimplemented methods) 并添加以下内容:
@Override
public int compareTo(Suits finalO) {
// TODO Auto-generated method stub
return 0;
}
@Override
void addAll() {
// TODO Auto-generated method stub
}
@Override
void addRange(Suits finalArg0, Suits finalArg1) {
// TODO Auto-generated method stub
}
@Override
void complement() {
// TODO Auto-generated method stub
}
@Override
public Iterator<Suits> iterator() {
// TODO Auto-generated method stub
return null;
}
@Override
public int size() {
// TODO Auto-generated method stub
return 0;
}
然后报告The method addAll() of type ExtendedEnumSet must override or implement a supertype method。它为addRange 和complement 回显此错误。我可以从Set 复制addAll 签名:public boolean addAll(Collection<? extends Suits> collection)。但是,当我尝试从 API 文档复制其他方法签名(addRange、complement)时,它们似乎不存在。我很茫然。
我改用EnumMap,效果很好。 EnumSet 似乎是不可能的。我错过了什么吗?
【问题讨论】:
-
您最好只使用
Comparator<EnumSet<Foo>>而不是尝试扩展它。 -
您的意思是
implements Comparable<EnumSet<Suits>>,还是您想比较西装本身?如果是后者,你应该创建一个实现Comparator<Suits>的类。 -
为什么你认为你需要扩展
EnumSet来实现Comparable<Suits>?将EnumSet<Suits>与Suits进行比较是什么意思?假设我有一组{ SPADE, HEART }并将其与Club进行比较?compareTo会返回什么? -
我需要它是
Comparable,所以我可以将它存储在TreeSet中。 -
@skia.heliou:不,你没有。您可以将
Comparator传递给TreeSet构造函数;你不需要它是Comparable,只是把它放在TreeSet中。
标签: java constructor subclass extends enumset