我正在挖掘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.
答案 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(..);
}
}
}