为什么 java 不阻止你实例化任何单例类对象?
我正在尝试创建 Void 类的对象
java.lang.Void
我写这段代码是为了创建两个实例
try{
Class clazz = Void.class;
Constructor cons = clazz.getDeclaredConstructor();
cons.setAccessible(true);
Void s2 = (Void) cons.newInstance();
System.out.println(s2);
Void s3 = (Void) cons.newInstance();
System.out.println(s3);
}catch (Exception e) {
e.printStackTrace();
}
谁能解释一下 - 为什么这在 java 中是允许的?
最佳答案
像这样使用反射可以让你避开正常的保护机制,并做一些事情,比如调用你通常无法访问的私有(private)构造函数和方法。 Java 不允许您在没有 setAccessible
调用的情况下通过私有(private)构造函数实例化一个类 - 本质上这意味着“我知道我不应该这样做但是......”
如果您需要运行不受信任的代码,那么您可以使用SecurityManager
机制来禁止这种“违反规则”的行为。
关于java - 为什么我可以用反射创建多个单例实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13134957/