constructor - How do you properly extend/subclass EnumSet in Java? -
i've attempted extend enumset implement comparable in eclipse. however, i'm fraught errors, right beginning. here's start with:
package sets; import java.util.enumset; enum suits{ spade, diamond, club, heart; } class extendedenumset extends enumset<suits> implements comparable<suits> { } (issue 1) defining explicit constructor
it informs me: implicit super constructor enumset<suits>() undefined default constructor. must define explicit constructor. so, follow quick fix , adds following constructor:
extendedenumset(class<suits> finalarg0, enum[] finalarg1) { super(finalarg0, finalarg1); // todo auto-generated constructor stub } ...where informs me: the constructor enumset<suits>(class<e>, enum[]) not visible. i've tried changing access modifier of both class , constructor no avail.
(issue 2) overriding abstract methods
the next issue when decide move on , fix next error eclipse reports: the type extendedenumset must implement inherited abstract method abstractcollection<suits>.iterator(). of course, tip of iceberg. once again employ quick fix (add unimplemented methods) , adds following:
@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; } where reports the method addall() of type extendedenumset must override or implement supertype method. echoes error addrange , complement. i'm able copy addall signature set: public boolean addall(collection<? extends suits> collection). however, when try copy other method signatures (addrange, complement) api docs, don't seem exist. i'm @ loss.
i've gone enummap instead, , works great. enumset seems impossible. missing something?
short answer: enumset not designed extended outside of java.util package.
long answer: enumset has 2 implementations: minienumset , hugeenumset. mini 1 optimized use single long represent values; huge 1 uses multiple longs. these classes 'hidden' inside jre calling code not know difference. why enumset provides many static factory methods create new instances. common design pattern prevent fragile base class antipattern.
the compiler telling you can't call super constructor of class because developers marked package-private. have package code under java.util call it. same other methods attempted override.
Comments
Post a Comment