【发布时间】:2014-07-30 02:47:49
【问题描述】:
我想创建一个像枚举一样工作的静态类,但使用字符串值。 以下哪种方式提取已创建类的完整实例最安全?
public class Name
{
public static final Name MY_NAME = new Name("Chris", "Doe");
public String firstName;
public String lastName;
public Name(firstname, lastname)
{
this.firstName = firstname;
this.lastName = lastname;
}
}
或
public class Name
{
public String firstName;
public String lastName;
public Name(firstname, lastname)
{
this.firstName = firstname;
this.lastName = lastname;
}
public static Name myName()
{
return new Name("Chris", "Doe");
}
}
【问题讨论】:
-
在第二种模式中,为什么要使用硬编码值?
-
两者不相同;每次调用
myName()时,第二个将返回一个新的Name实例,而第一个将返回相同的实例(除非序列化/并发恶作剧) -
第一个是更好的选择,因为您正在为字符串创建最终字段。
-
如果你想创建类似枚举的东西,那么为什么不使用枚举呢?
-
从不。我的意思是永远不要像在第二个示例中那样公开非静态、非最终字段。
标签: java class design-patterns static static-methods