抽象与无实例方法?
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 "";
}
}
我有一个 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 "";
}
}