Java 如何正确使用Enum?
我对Java非常熟悉,我第一次使用enum时是这样:Java 如何正确使用Enum?,java,enums,Java,Enums,我对Java非常熟悉,我第一次使用enum时是这样: public class Web { public String baseUrl; public static enum Environment { DEVELOPMENT("http://development") , PRODUCTION("http://production"), SANDBOX("http://sandbo
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;
}
}
}
public void setEnvironment(Environment environment) {
this.baseUrl = environment.getBaseUrl();
}
枚举环境
有三个常量开发
,生产
,沙箱
。Web
类还具有baseUrl
,要将环境
的baseUrl
设置到该类(不确定这样做是否是好的做法)
对于设置baseUrl
,我目前正在这样做:
new Web().setBaseUrl(Web.Environment.PRODUCTION.baseUrl)
我不确定这是将枚举用于类的正确方法。有没有办法直接将Web
baseUrl
设置为枚举baseUrl
我是不是遗漏了什么
提前感谢而不是直接使用Enum的成员
baseUrl
您应该将其设置为私有,并在Enum类中使用getter方法。除此之外,我认为可以这样使用enum使enum成为顶级类/enum。为baseUrl字段添加一个getter 我认为您的思路是正确的,但是通过这种方式访问URL,您正在失去Java枚举的一些优势。相反,请使用枚举的类型来帮助确保向方法传递正确的值。也就是说,单独传递枚举,让方法从中提取任何值。例如:
new Web().setEnvironment(Web.Environment.PRODUCTION);
现在,您只能将环境传递给Web类,而不是任何ol'字符串
[编辑]然后您的Web.setEnvironment方法如下所示:
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;
}
}
}
public void setEnvironment(Environment environment) {
this.baseUrl = environment.getBaseUrl();
}
这样的话,我就不能不经意间打电话给newweb().setEnvironment(“marvo”)
。它强制执行一定程度的正确性
vishal_的目标是正确的。即使使用Enum,您也应该练习数据隐藏和封装,因此将实例变量设为私有,并提供一个访问器,如getBaseUrl()来检索值。我认为如何使用Enum没有问题。但是,代码看起来有点笨拙:
new Web().setBaseUrl(Web.Environment.PRODUCTION.baseUrl)
我会将枚举从
Web
类中取出,并省略Web
类中多余的“baseUrl”字段-您不需要它,因为您的枚举中有值。我将使用Environment
类型的urlType成员,而不是baseUrl
。另外,最好将访问器方法添加到环境中的baseUrl
中enum以及Bohemian和vishal_aim所说的,您可能会不必要地公开baseUrl成员(或在中重构后的getBaseUrl()方法)。而是将枚举传递给Web类,让它从枚举中挖掘URL。这样,如果将枚举保持在Web类中,则可以将baseUrl保持为私有
public void setEnvironment(Environment env) {
baseUrl = env.getBaseUrl();
....
}
但是如果它只在Web
类中使用,那么在这个类中声明它有什么害处呢?@vishal\u aim我严重怀疑这将是唯一的用途。测试类、心跳进程可能希望在使用完整URL之前ping服务器,etcThanks用于回复。如果我通过了Web.Environment.PRODUCTION
。我只得到了产品
作为输出,而不是url
。我添加了更多的解释来说明我的意思。希望有帮助。谢谢。这真的帮助了我。