java - 私有(private)构造函数对象初始化

标签 java

我阅读了以下有关 NULL 对象模式的代码,但有一件事我确实不清楚。代码如下。

//Null.java
package test_package1;

public interface Null {

}

//Person.java
class Person {
    public final String first;
    public final String last;
    public final String address;
    // etc.
    public Person(String first, String last, String address){
        this.first = first;
        this.last = last;
        this.address = address;
    }
    public String toString() {
        return "Person: " + first + " " + last + " " + address;
    }
    public static class NullPerson
    extends Person implements Null {
        private NullPerson() { super("None", "None", "None"); }
        public String toString() { return "NullPerson"; }
    }
    public static final Person NULL = new NullPerson();
}

现在,我有一个问题:为什么以下代码片段应该起作用:

public static final Person NULL = new NullPerson();

NullPerson 类有一个私有(private)构造函数,那么如何在类范围之外进行对象实例化呢?

其次,为什么需要将NullPerson类设为静态内部类?

最佳答案

封闭类型可以访问在其中声明(嵌套)的任何成员(以及该成员的成员),无论其声明的访问修饰符如何。

Secondly, what is the need of making the NullPerson class as a static inner class?

让他们所做的事情成为可能。在我看来,类型本身应该是private。其他类型无法使用 NullPerson 执行任何操作。

关于java - 私有(private)构造函数对象初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25294122/

相关文章:

java - 多线程应用+Web应用

Java 日期和日历

java - 在 Java 中的同一类的另一个方法中使用一个方法

java - get 返回 hazelcast 3.5 中父类(super class) ArrayList 的值

java - 如何在注入(inject) bean 之前修改 Spring 解析的属性

java - 在 Android Studio 中打开 Unity 项目时 Gradle 同步失败

java - tomcat中的io处理

java - 如何在 odata4j 中按日期范围过滤实体?

子数组的Java长度

java - Spring Async,如何在异步任务执行器中启用请求范围