如何访问类的私有构造函数?

新手上路,请多包涵

我是一名 Java 开发人员。在一次采访中,我被问到一个关于私有构造函数的问题:

你能访问一个类的私有构造函数并实例化它吗?

我回答“否”,但我错了。

你能解释为什么我错了,并举一个用私有构造函数实例化对象的例子吗?

原文由 gmhk 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 384
1 个回答

绕过限制的一种方法是使用反射:

 import java.lang.reflect.Constructor;

public class Example {
    public static void main(final String[] args) throws Exception {
        Constructor<Foo> constructor = Foo.class.getDeclaredConstructor();
        constructor.setAccessible(true);
        Foo foo = constructor.newInstance();
        System.out.println(foo);
    }
}

class Foo {
    private Foo() {
        // private!
    }

    @Override
    public String toString() {
        return "I'm a Foo and I'm alright!";
    }
}

原文由 Joachim Sauer 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题