我目前正在编写Android游戏引擎库。基类(扩展)包含两个WSLog
对象(Android Log类方法的包装)。一个叫做gameEngineLog
(应该只在Game Engine项目中可见),另一个叫做gameLog
(应该在Game Engine项目和实际的Game项目中可见)。
在基类中,您可以使用getter方法获取这两个日志。
我已阅读Controlling Access to Members of a Class以了解哪些修饰符应位于getGameEngineLog()
前面,以使其仅在游戏引擎项目中可见,但没有修饰符(公开,受保护的,默认的或私人的)适合我的需要。
如何让gameEngineLog
对象仅在整个游戏引擎项目中可见,而不是实际的游戏项目?
注意:Game Engine项目中的所有其他组件(类)都包含对基类的引用(有些在不同的包中)。我想要的只是那些类引用了gameEngineLog
对象。任何方法都是受欢迎的。
这是一个直观的表示:
提前致谢。
答案 0 :(得分:0)
正如@JB Nizet所说,游戏引擎类和游戏类似乎应该有不同的基类。这些类仍然可以共享一个共同的基类(具有getGameLog
)。至少,游戏引擎类可能只有一个单独的子类。
如果只有这个基类的子类需要访问getGameEngineLog
,那么它可以作为Game Engine类的子类中的受保护成员引入。
如果这可以从其他类(但只有游戏引擎中的那些类)调用,而package-private不能这样做,一种方法是任何可以使用此日志的类都被赋予一个提供访问权限的对象来自游戏引擎对象。
例如,如果从中心点控制对日志的访问,并且一个执行不当的游戏无法访问它(即使是黑客攻击),那么您的项目可能会创建一个单例完成所有日志记录,并且可以(直接或间接)创建可以访问日志的任何其他对象,并为它们提供具有日志记录功能的对象。
实现提供对日志访问的对象的一种方法是使它成为具有私有构造函数的游戏引擎类的内部类的实例(这样只有游戏引擎才能创建它)。