为什么我要将私有构造函数与静态嵌套类组合在一起?

时间:2017-03-07 12:10:58

标签: java inner-classes

我正在挖掘Java类的可访问性。虽然define classes有各种各样的可能性,但我想知道下面这个例子的用例。

基本上,AnotherClass的构造函数是私有的。但是,AnotherClass有一个静态嵌套类,可以在PublicClass类中访问。

这只是我出于好奇而想出来的东西,但实际上它有效,我想知道,为什么我会用这样的东西?

示例

public class PublicClass {  
    public PublicClass() {
        AnotherClass.AnotherInnerClass innerClass = new AnotherClass.AnotherInnerClass();
        innerClass.anotherTest();
    }
}


class AnotherClass{
    /**
     * Private constructor - class cannot be instantiated within PublicClass.
     */
    private AnotherClass(){

    }

    /**
     * Static inner class - can still be accessed within package.
     */
    static class AnotherInnerClass{
        public void anotherTest(){
            System.out.println("Called another test.");
        }
    }
}

注意这些类在同一个文件中。

输出

Called another test.

1 个答案:

答案 0 :(得分:3)

AnotherInnerClass CAN使用AnotherClass的私有构造函数。例如,在Builder pattern中使用了这一点,这与此类似:

public class Foo {  
    public Foo() {
        Bar.Builder barBuilder = new Bar.Builder();
        Bar bar = barBuilder.build();
    }
}


public class Bar{
    private Bar(..){

    }

    static class Builder{
        public Bar build(){
            return new Bar(..);
        }
    }
}