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

84

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

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

我回答'不可以',但是我的答案是错误的。

你能解释一下我错在哪里,并给出一个使用私有构造函数实例化对象的例子吗?


25
关于Java,大多数类似的面试问题可以回答:“是的,你几乎可以做任何事情,但你应该吗?一般来说,不应该!”就我个人而言,我认为这是一个愚蠢的问题。我不希望我的开发人员去做那些事情,所以我不在意他们是否知道如何做。更实际的语言细节应该更重要。了解反射的更一般的实用性可能已经足够了。理解面向对象设计模式和语言上的限制比那些应该避免的晦涩语言结构更重要。 - nicerobot
一个只有私有构造函数的类无法从外部实例化。这可以用于仅具有静态支持方法的类。(当然,您可以使用反射,但对于这样的类,这有什么意义呢。) - Daniel
今天我被问到了类似的问题,只不过是关于C#语言的。和你一样,我的回答也是“不行”,但是有一种方法可以访问私有构造函数,那就是使用一个公共静态方法来返回该构造函数,然后就可以在任何变量中(如我的var)存储私有构造函数的实例,而无需使用反射技术。 - ArCiGo
阅读此链接,我认为会对您有所帮助:https://dev59.com/A3M_5IYBdhLWcg3w2XPw - Fox
@Daniel Singleton除了getinstance之外,不需要静态方法。然后是在同一类中对实例的静态引用。其他所有内容都不需要是静态的。你所描述的是一个实用程序。 - Potato
显示剩余5条评论
21个回答

-3

你可以在类外部访问它,非常容易访问。 只需以单例类为例,我们都做同样的事情,制作私有构造函数并通过静态方法访问实例。以下是与您的查询相关联的代码:

ClassWithPrivateConstructor.getObj().printsomething();

它肯定会工作,因为我已经测试过了。


那不会访问构造函数,只会访问已构建好的对象。 - Ray
这不会访问构造函数。 - James Conway

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接