This question already has answers here:
Constructors vs Factory Methods [closed]
                                
                                    (10个回答)
                                
                        
                                5年前关闭。
            
                    
我想创建一个静态类,其工作方式类似于枚举,但具有字符串值。
提取创建的类的完整实例,以下哪种方法最安全?

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");
    }
}

最佳答案

我想使用第一个,因为第一个包含static final Name MY_NAME,而在第二种情况下,每次调用new Name都会返回myName() method实例,这会浪费内存。因此,最好选择第一个。

因此,要提取所创建类的完整实例,您应该使用第一个实例。

另外,在谈论enum时,您要保持常量值,您的static field final Name MY_NAME实例将达到目的,您应该坚持第一个声明,从而支持您的枚举需求,而不是不浪费内存!

10-04 11:31