How to build interface for such enum
Question
I have the following enum:
public enum Status implements StringEnum{
ONLINE("on"),OFFLINE("off");
private String status = null;
private Status(String status) {
this.status = status;
}
public String toString() {
return this.status;
}
public static Status find(String value) {
for(Status status : Status.values()) {
if(status.toString().equals(value)) {
return status;
}
}
throw new IllegalArgumentException("Unknown value: " + value );
}
}
Is it possible to build StringEnum interface to make sure every enum has find(), toString() and a constructor?
Thanks.
Solution
It's not possible to specify either constructors or static methods in an interface. For a good, concise explanation, check out this article: No static methods in interfaces
OTHER TIPS
Enums already have a valueOf() (your find method) method. And "toString()" is a java.lang.Object method, so, every class will have that, in other words, you can't force it! I can't see the value of enforcing a constructor since different enums could have different initializations.
Kind Regards
- static methods cannot be defined in interfaces
- constructors cannot be defined in interfaces
toString
is defined injava.lang.Object
, requiring it in an interface will never result in a compile error if the method isn't defined.
Why do you want to enforce the constructor anyway? You cannot create new instances of enum
s at runtime anyway (unless maybe via some reflection mechanism).