java - 为什么要将私有(private)构造函数与静态嵌套类结合使用?

标签 java inner-classes

我目前正在深入研究 Java 类的可访问性。虽然有多种可能性 define classes ,我想知道下面示例的用例。

基本上,AnotherClass 的构造函数是私有(private)的。但是,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.

最佳答案

AnotherInnerClass 可以使用AnotherClass 的私有(private)构造函数。这用于例如 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(..);
        }
    }
}

关于java - 为什么要将私有(private)构造函数与静态嵌套类结合使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42647967/

相关文章:

java - 通用外部类的 "instanceof"问题

java - Cobertura 显示错误的线路覆盖

java - 在不转换为 byte[] 的情况下获取带字节编码的 String 大小

c++ - 为什么在对象的重载运算符 = 中需要返回?

android - TimePickerDialog 运行两次

java - 如果一个类有一个内部类并且内部类运行一个线程,那么内部类线程是否彼此共享外部类的相同字段?

java - 线程 "main"java.lang.ClassNotFoundException : tn. hadoop.WordCount 中的异常

java - 在实体、DTO 包上禁用 Sonar 重复

java - CopyOnWriteArrayList 是否足以在 Servlet Session 范围内保持购物车线程安全

c++ - 如何在源文件中实现嵌套类构造函数