Mon*_*eur 5 java oop visibility
为什么可以private从类中的public方法返回嵌套public类?编译器是否应该抱怨返回类型的可见性小于方法?
public final class Outer {
private static final class Configurator {
private Configurator() {
}
}
public static Configurator configure() {
return new Configurator();
}
}
Run Code Online (Sandbox Code Playgroud)
您可以从类外部调用此类方法,但前提是您愿意丢弃结果。
public class TestClass {
public static void main(String[] args) throws Exception {
Outer.configure(); // this is valid
}
}
Run Code Online (Sandbox Code Playgroud)
或者如果您愿意将结果称为Object:
public class TestClass {
public static void main(String[] args) throws Exception {
Object o = Outer.configure(); // this is valid
}
}
Run Code Online (Sandbox Code Playgroud)
编译器允许这样做,因为它不会违反 Java 的任何规则。Object只是您的私有类的唯一公开的超类。
我怀疑这种模式有很多实际用途。如果您希望返回一个不透明的对象,最好通过传回一个没有公共方法的公共类来完成,因为您至少可以在传回需要使用它的类时对其进行类型检查。