【发布时间】:2014-11-20 04:05:31
【问题描述】:
为什么可以从public 类中的public 方法返回private 嵌套类?编译器不应该抱怨返回类型的可见性低于方法吗?
public final class Outer {
private static final class Configurator {
private Configurator() {
}
}
public static Configurator configure() {
return new Configurator();
}
}
【问题讨论】:
-
这是不可能的。请发布一些代码。我假设方法的签名 returns 一个公共接口(或类似的),而该方法的实现返回该接口的私有子类。这是允许的。
-
@Seelenvirtuose:这是可能的,令人惊讶。对我来说感觉像是一个 Java 设计缺陷。 (C# 不允许这样做。)
-
啊,好的。我知道了。简单的技术说明:在此方法的声明范围内,(私有)类是可见的,因此可以用作方法签名中的返回类型。但是,您只能从此类内部调用此方法。由于无法访问该私有类,其他所有类中的代码都无法调用此方法。
-
@JonSkeet 那么如果我从外部包调用
configure()方法会发生什么?方法会不可见吗? -
@JonSkeet 你是对的。我是从客户的的角度考虑的。
标签: java oop visibility