java - 为什么我可以使用来自静态内部类的私有构造函数来实例化外部类?
问题描述
当调用 getInstance() 方法时,Singleton 类的实例将被实例化。我想知道为什么我可以从静态内部类实例化外部类?
public class Singleton{
private Singleton(){}
private static class SingletonHolder{
private static Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance(){
return SingletonHolder.INSTANCE;
}
}
解决方案
否则,成员或构造函数被声明为私有,并且当且仅当它出现在包含成员或构造函数声明的顶级类型(第 7.6 节)的主体内时才允许访问。
您的访问发生在包含私有构造函数声明的顶级类型的主体内,因此允许访问。
所以,虽然你有什么是允许的,但这不会是:
public class Singleton{
private Singleton(){}
// ..
}
// Second top-level class in same file.
class Foo {
Singleton s = new Singleton();
}
推荐阅读
- flutter - 为什么 Ad Mob 在 Flutter 应用中不显示广告?
- xml - 使用 xpath 从 BaseX 中选择所有标题
- c++ - 如何从/向二进制文件C++读取和写入具有动态数组成员的类
- c# - 以编程方式更改 xaml 的内容以更改控件的属性
- javascript - 如何访问 XMLHttpRequest 中的类方法?
- python - 对特定列中二级索引的最后一行中的每个一级索引求和
- android - 如何重新创建 Android 应用程序类?
- java - ATG baseline_update.sh 失败并出现错误:没有数据记录输出
- python - 避免重复将数据帧传递给递归函数?
- javascript - jQuery验证不适用于Webforms表单