Java中哪种方式更好?

Geo*_*gas 1 java static static-methods design-patterns class

我想创建一个静态类,其作用类似于枚举,但具有字符串值.以下哪种方法最安全地提取已创建类的完整实例?

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

要么

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");
    }
}
Run Code Online (Sandbox Code Playgroud)

ast*_*eri 6

最安全的?我不确定你的意思.

就最佳实践而言,第二种可能是浪费,因为它将分配Name每次myName()调用的新实例.另一个使用常量,因此可以节省更多内存.

在一个小应用程序中,所有这些都是相对微不足道的.

如果你试图让你的类模拟一个enum,那么常量肯定是要走的路,因为a的值enum只被初始化一次.

如果您不知道enum实际是什么,这里将是您的类的示例实现:

public enum Name {

    MY_NAME ("Chris", "Doe");

    private final String firstName;
    private final String lastName;

    private Name(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }
}
Run Code Online (Sandbox Code Playgroud)

......然后你可以简单地参考Name.MY_NAME.

  • 值得注意的是,enum构造函数上的`private`修饰符是完全可选的,因为枚举构造函数无论如何都是隐式的`private`.尝试将其设置为其他任何内容也是编译时错误. (2认同)