我有两个Enum如下:
enum Connector {
AND, OR, XOR;
}
enum Component {
ACTIVITY
}
Run Code Online (Sandbox Code Playgroud)
现在,我有一个follower在类中命名的变量Event.这个变量(follower)可以具有(并且应该具有)上述两个中Enum的任何一个的值.
那么,我应该给follower变量什么数据类型?
声明该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需要一个方法,则必须在每个位置更改声明.这可能永远不会出现在您的情景中,但使用这种方式的成本非常低,这是一种很好的防御措施.
第二个,稍微不那么重要的优点,更多的是关于品味:它避免了类型中的泛型,当你包含通配符时,它会变得不那么可读.
| 归档时间: |
|
| 查看次数: |
1798 次 |
| 最近记录: |