我试图在Eclipse中扩展EnumSet
以实现Comparable
。然而,从一开始就遇到了很多错误。这是我的起点:
package sets;
import java.util.EnumSet;
enum Suits{
SPADE, DIAMOND, CLUB, HEART;
}
class ExtendedEnumSet extends EnumSet<Suits> implements Comparable<Suits> {
}
(问题1)定义显式构造函数
这立即提示我:默认构造函数未定义棋牌套装枚举集的隐式超级构造函数。 必须定义一个显式构造函数。
因此,我按照快速修复方法添加了以下构造函数:
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;
}
该错误信息为“类型ExtendedEnumSet的方法addAll()必须覆盖或实现一个超类型方法”,同时也会在addRange和complement中出现此错误。我可以从Set中复制addAll的签名:public boolean addAll(Collection<? extends Suits> collection)。然而,当我尝试从API文档中复制其他方法的签名(addRange、complement),它们似乎不存在。我感到很困惑。
我改用EnumMap,它运行良好。EnumSet似乎不可行。我有什么遗漏吗?
Comparator<EnumSet<Foo>>
而不是试图扩展它。 - Louis WassermanComparable<EnumSet<Suits>>
,还是想要比较套装本身?如果是后者,你应该创建一个实现了Comparator<Suits>
接口的类。 - Sean Van GorderEnumSet
来实现Comparable<Suits>
?将一个EnumSet<Suits>
与一个Suits
进行比较是什么意思?假设我有一个集合{ SPADE, HEART }
并将其与Club
进行比较,compareTo
会返回什么? - David Conrad