使用私有构造函数来防止类的实例化?

2022-09-02 12:25:22

现在,我正在考虑向仅包含一些常量的类添加一个私有构造函数。String

public class MyStrings {
  // I want to add this:
  private MyString() {}

  public static final String ONE = "something";
  public static final String TWO = "another";
  ...
}

如果我向此类添加私有构造函数以防止有人实例化它,是否有任何性能内存开销?

您认为这完全是必要的,还是为此目的的私有构造函数是浪费时间和代码混乱?

更新

我将使用私有构造函数和该类的描述性javadoc进行最终类。我不能使用ENUM(我更喜欢),因为我现在卡在Java 1.4上。这将是我的修改:

/**
 * Only for static access, do not instantiate this class.
 */
public final class MyStrings {
  private MyString() {}

  public static final String ONE = "something";
  public static final String TWO = "another";
  ...
}

答案 1

使用私有构造函数来防止类的实例化?

您可以通过多种方式考虑用户为了创建常量而阻止实例化

  1. 正如你所提到的,一个带有私有构造函数的类,并且具有所有的字符串常量,这是一种方式,即使有开销,也可以忽略不计
  2. 否则,您可以使用 Final Modifier 创建一个类并定义字符串常量
  3. 可以将抽象类与字符串常量一起使用
  4. 您可以在属性文件中定义字符串常量,并且可以从中访问,这肯定会减少内存并提高代码的灵活性。

答案 2

您可以添加私有构造函数,但还有其他两个选项。

在同样的情况下,我会使用枚举器。如果它对你的实现有意义,你可以用它来代替,如果它或取决于你需要使用它的位置:publicprivate

public enum MyStrings {

  ONE ("something"),

  TWO ("something else");

  private String value;

  private MyStrings(String str) {
     this.value = str;
  }

}

另一种选择是将其放在一个类中,这些类不能实例化:abstract

public abstract MyStrings {

  public static final String STUFF = "stuff";
  public static final String OTHER = "other stuff";
}

枚举器和抽象类的访问就像您提供的实现一样:

MyStrings.STUFF

推荐