gpt4 book ai didi

java - 私有(private)类作为公共(public)方法的返回类型

转载 作者:IT老高 更新时间:2023-10-28 20:29:36 37 4
gpt4 key购买 nike

为什么这是有效的?

Foo.java

public class Foo {

public Bar getBar() {
return new Bar();
}

private class Bar {}

}

如果 Bar 是私有(private)的,这个类的用户将如何使用这个方法?当然可以使用多态,但是这不应该是无效的并且声明应该表明这是返回一个Object吗?

最佳答案

我刚刚对此进行了一些研究,但未能找到明确的答案。这似乎很可能只是 Java 语言设计者的疏忽,因为它实际上并没有造成任何伤害,所以它被留下了。这与将 public 方法放入 private 类没有什么不同。没有什么能阻止你这样做,即使没有办法实际访问该 public 方法。

当您尝试执行此操作时,当然 NetBeans 会给您“通过公共(public) API 导出非公共(public)类型”的警告。我希望大多数其他环境会给出类似的警告。

返回的对象对于任何尝试使用它的人来说都是完全没用的(除非他们使用反射),他们所能做的几乎就是将它存储到 Object (或他们的任何其他父类(super class)中)确实可以访问),然后传递该 Object

如果传递的 Object 被用作传递但从未操作过的“句柄”,您可能希望这样做。在这种情况下,尽管拥有类 public 仍然更有意义,但将其中的所有方法设为 private 以防止它们在您的类之外被执行(或定义public 接口(interface)返回并让 private 类实现它)。

所以答案似乎是:

它可能不应该是有效的,但由于它不会造成任何伤害,它从未被阻止。

在类似的主题上有一个很好的答案:

Exporting non-public type through public API

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

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com