【问题标题】:Call a non-static variable so it can be used by another class (cannot instantiate)调用一个非静态变量,以便它可以被另一个类使用(不能实例化)
【发布时间】:2012-03-30 18:50:52
【问题描述】:

我有问题

我有一些对象类,它们被称为“猫”“狗”等。

在这些类中,我为每个猫和狗对象分配了它们自己的整数能量级别(因此当它们“移动”通过二维数组时,它们会释放并获得能量)。 我通过 this.energylevel 来引用它。

因为“能级”是特定于每个对象的,所以我不能将其设为静态。 如何让“狗类”看到非静态存储在“猫类”中的猫对象的能量水平?

我无法在 dog 类中实例化 Cat c = new Cat();,它已经在 main 方法中完成。

这是一个大型项目的一部分,如果我解释得不够清楚,请原谅我

【问题讨论】:

  • 您希望Dog 如何获得Cat
  • 您可以创建一个助手,在您的主类中的不同对象之间传递数据。这样你就可以告诉dogA catA 在做什么,或者你可以告诉dogA dogB 在做什么。您只需要一个带有两个参数的方法,一个用于告诉对象,另一个用于对象告诉第一个。然后,您可以向 DogCat 类添加一个方法来接受此信息并对其做出反应。
  • 每本教你面向对象编程或 Java 基础知识的书中都有解决方案。

标签: java object non-static


【解决方案1】:

您可以在 Cat 对象中添加一个静态方法,该方法将根据 Cat 的 ID 返回非静态变量。您需要在 Cat 对象内的静态地图中保留 Cat 列表。

private static HashMap<String,Cat> cats = new HashMap<String,Cat>();
...
public static int getEnergy(String catId) {
    Cat myCat = cats.get(catId);
    return myCat.getEnergy();
}

public int getEnergy() {
    return this.energy()
}

如果您想按 X、Y 搜索,也可以按要求:

private static ArrayList<Cat> cats = new ArrayList<Cat>();

private int energy = 100;
private int x = 0;
private int y = 0;
...
public static int getEnergy(int x, int y) {
    //Energy of -1 being the error (not found) state.
    int energy = -1;
    for(Cat cat : cats) {
        if(cat.getX() == x && cat.getY() == y) {
            energy = cat.getEnergy();
        }
    }
    return energy;
}

public int getEnergy() {
    return this.energy()
}

public int getX() {
    return this.x;
}

public int getY() {
    return this.y;
}

【讨论】:

  • 感谢 GavinCattell,答案很好,但有没有办法让 Cat 的 ID 等于二维数组中的位置?
  • 两个对象可以出现在同一个位置吗?
  • 嘿,再次感谢,但我写出了代码,但在“return myCat.getEnergy();”处出现错误它仍然说无法从静态上下文访问非静态方法 getEnergy(),并且“public static int getEnergy(int x, int y)”缺少返回语句
  • 里面有几个错别字,我已经清理过了。请再看看。
  • 对不起,我输出了能量水平,它说猫的能量水平都是-1,我检查并三次检查以确保我没有做错任何事情
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-23
  • 1970-01-01
  • 2017-09-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多