Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to build interface for such enum

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.

like image 722
serg Avatar asked Dec 13 '22 06:12

serg


2 Answers

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

like image 123
Frank Pape Avatar answered Dec 15 '22 18:12

Frank Pape


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

like image 29
marcospereira Avatar answered Dec 15 '22 19:12

marcospereira