内部类中的私有构造函数在外部类中初始化

Posted

技术标签:

【中文标题】内部类中的私有构造函数在外部类中初始化【英文标题】:Private construtor in inner class initialized within outer class 【发布时间】:2014-12-12 09:07:27 【问题描述】:

是否可以初始化内部类的实例,该实例具有从外部类中标记为私有的构造函数。我的印象是,一旦构造函数被声明为私有,除了类本身之外,没有人可以创建该类的实例。示例

Public class Outerclass 
    
        newinstance = new Innerclass();

       private final class InnerClass 
       
         private InnerClass(//paremeters)
         
            //constructor declaration inside
           
       
    

【问题讨论】:

【参考方案1】:

我认为您需要研究单例模式。您不能声明其构造函数被标记为私有的类的实例,但您始终可以在该类中声明具有私有属性的静态方法。因此,当您调用内部类的静态方法时,它会将该类的唯一实例返回给调用者。

http://en.wikipedia.org/wiki/Singleton_pattern

【讨论】:

拥有静态方法来实例化某个类并不意味着该类只有一个实例,因此这不是单例模式 外部类总是可以访问内部类成员。而且您不能在内部(即非静态嵌套)类中声明静态方法。【参考方案2】:

内部类是其外部类的成员,因此它们可以完全访问所有其他成员,并且所有其他成员都可以完全访问它们。

内部类中的访问标记仅适用于不相关的类。而且由于您的内部类本身是私有的,因此只能从其外部类进行构造。

【讨论】:

【参考方案3】:

您可以在外部类上定义一个公共方法来实例化内部类:

public void instantiateInnerClass() 
    myAttribute = this.new InnerClass();

但是,您将无法直接访问和操作内部类的实例。

【讨论】:

以上是关于内部类中的私有构造函数在外部类中初始化的主要内容,如果未能解决你的问题,请参考以下文章

抽象类中的私有构造函数

ZeroC ICE源代码中的那些事 - 嵌套类和局部类

java内部私有类的构造函数

16.内部类

java学习之内部类

java 内部类