gpt4 book ai didi

java - 面向对象设计: getter method (or object) visibility

转载 作者:行者123 更新时间:2023-12-01 05:05:21 25 4
gpt4 key购买 nike

我目前正在编写一个 Android 游戏引擎库。基类(已扩展)包含两个 WSLog 对象(Android Log 类方法的包装器)。一个称为 gameEngineLog (它应该只在 Game Engine 项目中可见),另一个称为 gameLog (它应该在 Game Engine 项目中可见,并且实际的游戏项目)。

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

我已通读 Controlling Access to Members of a Class了解哪些修饰符应该位于 getGameEngineLog() 前面,以使其仅在游戏引擎项目中可见,但没有一个修饰符(公共(public)、 protected 、默认或私有(private))适合我的需求.

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

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

这是一个直观的表示:

enter image description here

提前致谢。

最佳答案

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

如果只有该基类的子类需要访问getGameEngineLog,那么可以将其作为 protected 成员引入到游戏引擎类的子类中。

如果这是为了从其他类(但仅限于游戏引擎中的类)调用,并且包私有(private)不起作用,一种方法是为任何可以使用此日志的类提供一个提供访问权限的对象从游戏引擎对象到它。

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

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

关于java - 面向对象设计: getter method (or object) visibility,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12770044/

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