java - 公共(public)方法如何返回私有(private)类型?

标签 java oop visibility

为什么可以从 public 类中的 public 方法返回一个 private 嵌套类?编译器不应该提示返回类型的可见性低于方法吗?

public final class Outer {
    private static final class Configurator {
        private Configurator() {
        }
    }

    public static Configurator configure() {
        return new Configurator();
    }
}

最佳答案

可以从类外部调用这样的方法,但前提是您愿意丢弃结果。

public class TestClass {
  public static void main(String[] args) throws Exception {
    Outer.configure(); // this is valid
  }
}

或者如果您愿意将结果称为对象:

public class TestClass {
  public static void main(String[] args) throws Exception {
    Object o = Outer.configure(); // this is valid
  }
}

编译器允许这样做,因为它不违反 Java 的任何规则。 Object 只是您私有(private)类的唯一公开可用的父类(super class)。

我怀疑这种模式有很多实际用途。如果您希望返回一个不透明的对象,最好通过传回一个没有公共(public)方法的公共(public)类来完成,因为您至少可以在将其传回需要使用它的类时对其进行类型检查。

关于java - 公共(public)方法如何返回私有(private)类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26037632/

相关文章:

javascript - 创建扩展 native 数组的集合有哪些危险?

c# - 如何通过反射获取类及其父类的私有(private)字段?

java - 模拟未被注入(inject)

java - 使用 extjs 4 spring 上传图像文件

c++ - 基于内部类制作模板

c# - 属性初始化和 'this'

java - 关于乘法的奇怪的 java.lang.Double 簇

java - Java 接受外文字母吗?

c# - ASP.NET 控件可见性困境

java - 从子类调用静态方法导致 IllegalAccessError