java - 为什么我可以用反射创建多个单例实例?

标签 java

为什么 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/

相关文章:

java - 无法使用注释更改 Hibernate 3.6.10 上的序列名称 (Oracle 10g)

java - 选择元素 Jsoup 最里面的子元素

java - 解释 EJB 事务属性的示例或用例

java - JComboBox 过滤器

java套接字服务器程序在一段时间后不接受连接

java - 计算中空三维几何物体的体积

java - 用户输入 Ctrl+Z 时终止 Java 程序

java - 异常: Key Down/Up events only make sense for modifier keys

java - 如何检测并删除数组中两个以上的重复项?

java - 如何从 JFrame 中删除最大化和最小化按钮?