我有一个上下文类 - > prototype.context - >哪些应用可以创建对象但不能扩展。但是,系统开发人员可以将类扩展为更多类型。系统类包是prototype.system和prototype.dbengine。这些类应该具有对上下文对象的完全访问权限,但其他类不应该。
如果我将上下文中的字段保留为包访问权限,则这些类无法访问它,因为它们来自不同的包。那么我应该如何命名这些包以便其他开发人员可以使用这些类,并且还可以完全访问系统类?
答案 0 :(得分:1)
如果你绝对必须使用包私人访问和/或不能使用protected
,那么你真正唯一没有使用public
的选择就是将所有内容都放在同一个包中。
这是因为在Java中,“子包”并不存在 - 例如,java.util
是一个与java.util.concurrent
完全不同的包;因此,从访问范围的角度来看,java.util.concurrent
是否被称为java.concurrent
或java.util.concurrent
没有区别。在任何一种情况下,java.util
中的类都无法访问{{1}}中的包私有成员。命名仅为方便起见,并不表示任何实际的层次结构。
因此,无论您如何命名包,您都无法从其他包中访问包私有成员。
答案 1 :(得分:1)
您想要的实际上是C ++朋友级功能的模拟。这里描述了一个很好的技巧:https://stackoverflow.com/a/18634125/2886891
答案 2 :(得分:0)
让system和dbengine类在上下文中扩展必要的类,并设置system和dbengine类需要保护的字段/方法。