Java 抽象与无实例方法?

Java 抽象与无实例方法?,java,oop,static,abstract-class,static-methods,Java,Oop,Static,Abstract Class,Static Methods,我有一个类(class util)用于生成密码(它只有一个公共静态方法)。这里有两种方法:将其抽象化,这样就没有人可以创建其实例 public abstract class PasswordGenerator { public static String randomstring(int lo, int hi) { // Some logic , doesn't matter return ""; } } 或者使其构造函数私有。那么最好的方法是什么呢 pub

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

public abstract  class PasswordGenerator {

  public static String randomstring(int lo, int hi) {
     // Some logic , doesn't matter 
      return "";
  }
}
或者使其构造函数
私有
。那么最好的方法是什么呢

public class PasswordGenerator {

  private PasswordGenerator() {

  }

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

那么,最好的方法是什么呢?

您绝对不应该将类抽象化,因为这可能会向其他开发人员表明,它是要扩展的(并因此实例化)

public class PasswordGenerator {

  private PasswordGenerator() {

  }

  public static String randomstring(int lo, int hi) {
    // Some logic , doesn't matter 
    return "";
  }
}
让一个类在技术上能够被实例化是一个小问题


但在这里,您可以看到一种变通方法,它使用私有构造函数并将类设置为final。

您绝对不应该将类抽象化,因为这可能会向其他开发人员表明,它是要扩展的(因此被实例化)

让一个类在技术上能够被实例化是一个小问题


但在这里,您可以看到一种变通方法,它使用私有构造函数并将类设置为final。

将类设置为final和构造函数设置为private

使用
final
关键字,您可以清楚地表达这样一种意图,即类不是继承的。 使用
private
构造函数,您可以清楚地表达这样一种意图,即类不会被实例化

public final class PasswordGenerator {

  private PasswordGenerator() {}

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

将类
设为final
并将构造函数
设为private

使用
final
关键字,您可以清楚地表达这样一种意图,即类不是继承的。 使用
private
构造函数,您可以清楚地表达这样一种意图,即类不会被实例化

public final class PasswordGenerator {

  private PasswordGenerator() {}

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

你想通过这个实现什么?!java没有静态类吗?你想要做的可能的重复就是创建一个单例。在Java中寻找singleton模式,或者通过@mad找到答案_manny@KoosGadellaa我不同意,据我们所知,OP不需要一个单例,因为他没有提到有状态操作。你想通过这个实现什么?!java没有静态类吗?你想要做的可能的重复就是创建一个单例。在Java中寻找singleton模式,或者通过@mad找到答案_manny@KoosGadellaa我不同意,据我们所知,OP不需要单例,因为他没有提到有状态操作。