【发布时间】:2010-10-11 12:47:09
【问题描述】:
好吧,让我们离开关于友谊是否打破封装的争论,并实际尝试优雅地提出一个连贯的设计。这是一个双重功能:
1) 关于如何实施的一般问题:
public class A
{
friend class B;
}
2) 为什么我需要这个功能?我的一些类实现了 Serializable 接口。但是,我想在 Derived 类中保护 Serializable 方法,这样我就不会将它们暴露给客户端(以及文档——javadoc)。但是,内部类应该能够访问它们。在java中解决这个问题的一般方法是什么?
注意:我使用的是当前 C++ 标准中定义的友谊。
谢谢
【问题讨论】:
-
Java 是否支持像 C# 一样的“内部”修饰符?在 C# 中,您可以使用 internal 使内容仅在同一程序集中可见。
-
信息确实不够。无论如何,可序列化方法不应该是私有的。
-
是的,您不需要访问序列化方法来序列化对象。这似乎是有争议的,也不是问题……
-
@OregonGhost:不,Java 不支持。最接近的等价物是默认访问修饰符,它使类或成员对定义它的包可见。 (Java 中的包最类似于 C# 中的命名空间。)
-
JDK7 可能(也可能没有)具有模块访问说明符。这将与内部不同,因为它不依赖于部署单元。