我非常喜欢Java,我第一次使用enum:
public class Web {
public String baseUrl;
public static enum Environment {
DEVELOPMENT("http://development") ,
PRODUCTION("http://production"),
SANDBOX("http://sandbox");
public final String baseUrl;
private Environment(String baseUrl)
{
this.baseUrl = baseUrl;
}
}
}
枚举Environment
包含三个常量DEVELOPMENT
,PRODUCTION
,SANDBOX
。 Web
课程还有baseUrl
Environment
baseUrl
设置{不确定这是不错的做法。)
设置baseUrl
我目前正在这样做:
new Web().setBaseUrl(Web.Environment.PRODUCTION.baseUrl)
我不确定这是在类中使用枚举的正确方法。有没有办法直接将Web
baseUrl
设置为枚举baseUrl
。
我在这里遗漏了什么。
提前致谢
答案 0 :(得分:3)
我认为你走在正确的轨道上,但是你通过这种方式访问URL失去了Java枚举的一些优势。相反,请使用枚举的类型来帮助确保将正确的值传递给方法。也就是说,单独传递枚举,让方法从中提取任何值。例如:
new Web().setEnvironment(Web.Environment.PRODUCTION);
现在,您只能将环境传递给Web类,而不是任何ol'字符串。
[编辑]然后您的Web.setEnvironment方法如下所示:
public void setEnvironment(Environment environment) {
this.baseUrl = environment.getBaseUrl();
}
这样,我不能偶然来new Web().setEnvironment("marvo")
。它强制执行一定程度的正确性。
vishal_aim是对的。即使使用Enums,您也应该练习数据隐藏和封装,因此请将实例变量设为私有,并提供getBaseUrl()等访问器来检索值。
答案 1 :(得分:2)
不要直接使用Enum的成员baseUrl
,而应将其设为私有,并在枚举类中使用getter方法。除此之外,我认为以这种方式使用枚举是可以的
答案 2 :(得分:1)
使枚举成为顶级课程/枚举 为baseUrl字段添加一个getter。
答案 3 :(得分:1)
我认为你如何使用Enum没有任何问题。但是代码看起来很笨拙:
new Web().setBaseUrl(Web.Environment.PRODUCTION.baseUrl)
我会从Web
类中取出Enum并省略Web
类中冗余的'baseUrl'字段 - 您不需要它,因为您的Enum中有值。而不是baseUrl
我会有一个类型为Environment
的urlType成员。也很高兴将访问者方法添加到baseUrl
枚举
Environment
答案 4 :(得分:0)
除了Bohemian和vishal_aim所说的,你可能会在重构它之后不必要地暴露baseUrl成员(或getBaseUrl()方法)。而是将枚举传递给Web类,并让它从枚举中挖掘URL。这样,如果将enum保留在Web类中,则可以将baseUrl保持为私有。
public void setEnvironment(Environment env) {
baseUrl = env.getBaseUrl();
....
}