防止 Java class 被实例化和继承
Preventing a Java class from being instantiated and inherited
我被要求修改一个简单的 class 以使其无法被实例化和继承。
我对如何使用 abstract 表示不被实例化和 final 表示不被继承感到困惑。
这样的class应该怎么写?
提前致谢。
A class 不能既是最终的又是抽象的。您可以通过隐藏构造函数来防止实例化,并引发异常以防止通过反射进行实例化。
看起来像这样:
final class MyClass {
private MyClass() {
throw new IllegalStateException("Cannot be instantiated"); //some exception
}
}
// final can not be inherited
// only static methods will work on this class
final class FrozenClass {
private FrozenClass() {
// can not be instantiated
}
}
因此,您必须使 class 最终化并添加一个私有构造函数:
看看这个例子:
final class uninstantiable {
private uninstantiable() {
}
}
所以现在每当您尝试实例化新对象时都会出错 classname
在 packagename
.
中具有私有访问权限
我被要求修改一个简单的 class 以使其无法被实例化和继承。 我对如何使用 abstract 表示不被实例化和 final 表示不被继承感到困惑。
这样的class应该怎么写?
提前致谢。
A class 不能既是最终的又是抽象的。您可以通过隐藏构造函数来防止实例化,并引发异常以防止通过反射进行实例化。
看起来像这样:
final class MyClass {
private MyClass() {
throw new IllegalStateException("Cannot be instantiated"); //some exception
}
}
// final can not be inherited
// only static methods will work on this class
final class FrozenClass {
private FrozenClass() {
// can not be instantiated
}
}
因此,您必须使 class 最终化并添加一个私有构造函数: 看看这个例子:
final class uninstantiable {
private uninstantiable() {
}
}
所以现在每当您尝试实例化新对象时都会出错 classname
在 packagename
.