Java ENUM问题

Yat*_*oel 2 java enums

我有两个Enum如下:

enum Connector {
    AND, OR, XOR;
}

enum Component {
    ACTIVITY
}
Run Code Online (Sandbox Code Playgroud)

现在,我有一个follower在类中命名的变量Event.这个变量(follower)可以具有(并且应该具有)上述两个中Enum的任何一个的值.

那么,我应该给follower变量什么数据类型?

Gru*_*eck 5

声明该follower字段的接口.

public interface Follower {
    // any methods
}
Run Code Online (Sandbox Code Playgroud)

并且两个枚举都实现了该接口.

public enum Connector implements Follower {
    AND, OR, XOR;
}


enum Component implements Follower {
    ACTIVITY
}
Run Code Online (Sandbox Code Playgroud)

然后你可以申报你的领域:

Follower follower = Connector.OR;  
Run Code Online (Sandbox Code Playgroud)

要么

Follower follower = Component.ACTIVITY;
Run Code Online (Sandbox Code Playgroud)

与宣布该领域Enum<? extends Follower>(我能想到)相比,这有一个明显的优势.通过这种方式,您可以自由地向Follower接口添加方法而无需在将来修改字段,而您无法控制Enum类型,因此如果您确定Follower需要一个方法,则必须在每个位置更改声明.这可能永远不会出现在您的情景中,但使用这种方式的成本非常低,这是一种很好的防御措施.

第二个,稍微不那么重要的优点,更多的是关于品味:它避免了类型中的泛型,当你包含通配符时,它会变得不那么可读.