抽象与无实例方法?

Abstract vs No instance approach?

我有一个 class(class 实用程序)用于生成密码(它只有一个 public 静态方法)。这里有两种方法:使其抽象化,这样就没有人可以创建它的实例

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

那么最好的方法是什么?

您绝对不应该将 class 抽象化,因为这可能向其他开发人员表明它旨在被扩展(并因此被实例化)。

class技术上能够实例化是一个小问题。

但是在这个 SO thread 中,您可以看到一个解决方法,它使用私有构造函数并结合使 class 最终化。

使 class final 和构造函数 private.

使用 final 关键字,您清楚地表达了 class 不被 继承 的意图。 使用 private 构造函数,您可以清楚地表达 class 不被 实例化 .

的意图
public final class PasswordGenerator {

  private PasswordGenerator() {}

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