java - 在 Android Studio 应用程序中创建对象的全局实例

标签 java android-studio

我正在 Android Studio 中设计一款游戏。我有一个包含多个片段的 Activity 。我还有一个 Player 对象,我想为其创建一个实例。

Player player1 = new Player();

我的 Activity 中的所有这些片段都会对 player1 进行更改。 不要将此对象传递给每个 Fragment 和连续的 Activity:

intent.putExtra("Player",player1);

有没有一种方法可以从其他片段和 Activity 访问player1,而无需使用 putExtra() 方法传递它?

我尝试将player1设为静态:

static Player player1 = new Player();

但是,我无法从其他 .java Activity 文件访问 player1

所以,基本上,我想要一个策略,使 player1 成为我可以随时随地引用的全局对象。我不想将 Player 类中的所有方法设为静态,因为我希望能够拥有 player1player2player3 我的游戏中的文件,因此我需要能够创建 Player 的实例,并且我认为如果每个方法都是静态的(对吗?)

我刚刚开始 OOP,所以我确信有一些简单的事情我忽略了,或者也许不是搞乱修饰符,而是有更好的方法来实现我想要的。也许通过使用接口(interface)?界面如何工作?

通过创建一个扩展应用程序的类来将信息存储在应用程序对象中怎么样?

最佳答案

如果你想在任何地方访问它,并且不关心隐私,你需要将其设置为 public

public static Player player1 = new Player();

默认情况下仅进行包级别访问。

您可以在其他类中使用此语法来访问它:

Activity1.player1; // do something...

注意:可能有更好的设计替代方案,只需创建一个字段 public所以你可以在任何地方访问它,但这只是最低限度的需要。不建议这样做,并且由于您正在学习,您可能需要阅读其中一些设计概念。

例如,使用公共(public) getter/setter 通常是访问类/实例字段的更常见方法之一。

private static Player player1 = new Player();

public static Player getPlayer1() { return player1; }
public static void setPlayer1(Player p) { player1 = p; }

// ...

So, basically, I want a strategy to make player1 a GLOBAL object that I can reference whenever and wherever. I don't want to make all the methods within the Player class static, because I want to be able to have player1, player2, and player3 files on my game, so I need to be able to create an instance of a Player, and I don't think it can be done if every method was static (right?)

不,那不是真的。类(class) static只要有公共(public)构造函数和/或它不是抽象的,就可以实例化方法。 static只是意味着它是在 class 级别访问的,并且不需要实例,尽管您仍然可以访问 static来自对象引用的方法。 static但这也意味着所有实例共享相同的字段,因此该类的所有实例中只有一个字段、方法等。

您可能会考虑使用的一种设计模式是 Singleton模式,它允许您在需要时获取类的单个实例,因此您不需要搞乱静态属性和方法(如果您不需要使用它们,这可能会带来缺点)。

What about storing info in the Application Object by creating a class that extends Application?

根据documentation ,这是一种可以接受的方法,尽管您可能仍然需要考虑一些总体设计选择并确定这是否确实是您想要采取的路线。

Base class for those who need to maintain global application state. You can provide your own implementation by specifying its name in your AndroidManifest.xml's tag, which will cause that class to be instantiated for you when the process for your application/package is created.

关于java - 在 Android Studio 应用程序中创建对象的全局实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31055412/

相关文章:

java - 如何保护 JpaRepository

java - 使用pdfbox将A4图像定位为PDF文件中的页面

android - 如何在android SDK中过滤不需要的包?

java - 在签名配置中写密码安全吗?

Android Studio - 删除安全异常警告

android-studio - 在 Android Studio 上测试 RESTful Web 服务 (RESTClient)

Java:泛型类型类型不匹配语法错误

java - 该算法的基本情况是什么?

java - 如何使用 Hibernate 连接到 Oracle 12c PDB

java - Android Studio使用Gradle添加.jar文件