我有一个看起来像的枚举
public enum MyEnum
{
myValue
{
@Override
public String myMethod(String dostuff)
{
return dostuff + "One";
}
},
myOtherValue
{
@Override
public String myMethod(String dostuff)
{
return dostuff + "Two";
}
},
aThirdValue
{
@Override
public String myMethod(String dostuff)
{
return dostuff + "Three";
}
};
public abstract String myMethod(String dostuff);
}
Run Code Online (Sandbox Code Playgroud)
现在我想我们都同意这看起来很糟糕?但是更好的方式是什么?我可以有一个abstractfactory,但后来我需要三个实现类,每个实现类作为一行方法.不要觉得这么漂亮.我可以使用开关(在代码或枚举中).但后来我忘了添加一个案例.
那么,最后的路是什么?必须有一个模式,但似乎找不到一个.到目前为止,最好的香港专业教育学院提出的意见是添加评论自动崩溃Netbeans中的方法,也不是那么精彩.
解决方案是为枚举创建一个私有构造函数:
public enum MyEnum
{
myValue("One"), myOtherValue("Two"), aThirdValue("Three");
private String value;
private MyEnum(String value) { this.value = value; }
public String myMethod(String dostuff)
{
return dostuff + value;
}
}
Run Code Online (Sandbox Code Playgroud)
[编辑]请注意,您可以传递更复杂的内容.例如,您可以传入一个实现某个接口的类(比如说Work有一个方法doWork()).这样,您可以在枚举中存储方法调用以执行不同类型的工作.