私有类作为公共方法的返回类型
2022-09-01 21:17:11
为什么这是有效的?
傅.java
public class Foo {
public Bar getBar() {
return new Bar();
}
private class Bar {}
}
如果 Bar 是私有的,那么此类用户将如何使用此方法?当然可以使用多态性,但这难道不应该是无效的,声明应该指示这是返回一个对象吗?
为什么这是有效的?
傅.java
public class Foo {
public Bar getBar() {
return new Bar();
}
private class Bar {}
}
如果 Bar 是私有的,那么此类用户将如何使用此方法?当然可以使用多态性,但这难道不应该是无效的,声明应该指示这是返回一个对象吗?
我刚刚对此进行了一些研究,但无法找到明确的答案。这似乎很可能只是Java语言设计者的疏忽,因为它实际上并没有造成任何伤害,所以它已经离开了。这与将方法放入类中没有什么不同。没有什么能阻止您执行此操作,即使没有办法实际访问该方法。public
private
public
当然,当您尝试执行此操作时,NetBeans 会给您一个警告“通过公共 API 导出非公共类型”。我预计大多数其他环境都会给出类似的警告。
返回的对象对于任何试图使用它的人来说都是完全无用的(除非他们使用反射),他们所能做的几乎就是将其存储到一个(或他们有权访问的任何其他超类)中,然后将其传递。Object
Object
如果传递的被用作传递但从未操作的“句柄”,则可能需要执行此操作。在这种情况下,拥有类仍然更有意义,但使所有方法在其中,以防止它们在类外部作(或定义一个接口以返回并让类实现它)。Object
public
private
public
private
所以答案似乎是:
它可能不应该是有效的,但由于它不会造成任何伤害,因此它从未被阻止过。
在类似的主题上,这里有一个很好的答案:
为什么这是有效的?
由于调用位置中的客户端代码可能期望(或根本不期望任何内容),因此从任何位置调用此方法都没有问题:Object
Object o = new Foo().getBar();