1

我目前正在编写一个 Android 游戏引擎库。基类(得到扩展)包含两个WSLog对象(Android Log 类方法的包装器)。一个被调用gameEngineLog(它应该只在游戏引擎项目中可见),另一个被调用gameLog(它应该在游戏引擎项目和实际游戏项目中可见)。

在基类中,您可以使用 getter 方法获取两个日志。

我已经通读了控制对类成员的访问,以了解哪些修饰符应该在前面,getGameEngineLog()使其仅在游戏引擎项目中可见,但没有任何修饰符(公共、受保护、默认或私有)适合我的需要。

如何使gameEngineLog对象仅在整个游戏引擎项目中可见,而不是实际的游戏项目?

注意:游戏引擎项目中的所有其他组件(类)都包含对基类的引用(有些在不同的包中)。我想要的只是这些类具有对gameEngineLog对象的引用。欢迎任何方法。

这是一个视觉表示:

在此处输入图像描述

提前致谢。

4

1 回答 1

0

正如@JB Nizet 所说,似乎游戏引擎类和游戏类应该有不同的基类。这些类仍然可以共享一个共同的基类(应该有getGameLog)。至少,游戏引擎类可能只有一个单独的子类。

如果只有这个基类的子类需要访问getGameEngineLog,那么它可以作为受保护的成员引入游戏引擎类的子类中。

如果打算从其他类(但仅限于游戏引擎中的类)调用它,并且 package-private 不会这样做,则一种方法是为任何可以使用此日志的类提供一个对象,该对象提供对它的访问权限一个游戏引擎对象。

例如,如果对日志的访问是从一个中心点控制的,并且执行不良的游戏必须不可能访问它(即使是通过黑客攻击),那么您的项目可以创建一个单例,通过它所有日志记录完成后,它可以(直接或间接)创建任何其他可以访问日志的对象,并为它们提供具有日志记录功能的对象。

实现提供对日志访问的对象的一种方法是将其作为具有私有构造函数的游戏引擎类的内部类的实例(以便只有游戏引擎可以创建它)。

于 2013-04-21T18:10:05.383 回答