摘要vs无实例方法?

时间:2016-07-13 11:28:43

标签: java oop static abstract-class static-methods

我有一个用于生成密码的类(类util)(它只有一个公共静态方法)。这里有两种方式:使它变得抽象,所以没有人可以创建它的实例

public abstract  class PasswordGenerator {

  public static String randomstring(int lo, int hi) {
     // Some logic , doesn't matter 
      return "";
  }
}

或制作其构造函数private。那么这样做的最佳方法是什么?

public class PasswordGenerator {

  private PasswordGenerator() {

  }

  public static String randomstring(int lo, int hi) {
    // Some logic , doesn't matter 
    return "";
  }
}

那么最好的方法是什么?

2 个答案:

答案 0 :(得分:3)

你绝对不应该把这个类抽象化,因为这可能向其他开发人员表明它是为了扩展(并因此实例化)。

让技术上能够实例化的课程是一个小问题。

但是在这个SO thread中你可以看到一个变通方法,它使用私有构造函数和最终的类。

答案 1 :(得分:1)

同时创建课程final和构造函数private

使用final关键字,您可以清楚地表达该类未被继承的意图。 使用private构造函数,您可以清楚地表达该类未被 instanciated 的意图。

public final class PasswordGenerator {

  private PasswordGenerator() {}

  public static String randomstring(int lo, int hi) {
    // Some logic , doesn't matter 
    return "";
  }
}