【问题标题】:How do I have two classes in different lines interact with each other in Java?如何在 Java 中让不同行中的两个类相互交互?
【发布时间】:2015-04-20 03:15:24
【问题描述】:

我是 Java 新手,我正在制作一款基于文本的冒险游戏。在我的游戏中,有多个房间,每个房间都有一系列物品。我有一个名为“门”的类,我希望房间 A 有一个通向房间 B 的门,反之亦然。但是当我这样做时:

    public room A = new room(new items[] {
new door(B)});
    public room B = new room(new items[] {
new door(A)});

我收到 错误 消息 "Cannot reference a field before it is defined"(我正在使用 Eclipse)。

有没有办法让这个工作?

我知道这意味着它不能告诉一个类在定义该类之前做某事,但我不知道如何修复它。

【问题讨论】:

  • 类不是按顺序“定义”的——你可以在任何地方访问任何类。此外,类不做事——对象做。此外,错误消息显示字段,而不是类。
  • 如果您需要两个对象相互引用,您不能在它们的构造函数中这样做。您需要创建对象,然后告诉它们彼此。您尝试这样做的方式,其中之一永远不会被创建。

标签: java arrays class


【解决方案1】:

您需要在创建房间后添加项目。这意味着您需要在room 中编写addItem 方法。

public room A = new room();
public room B = new room();

{ // this is the start of an "instance initializer"; it runs before any constructors (but after field initializers)
    // if you have a constructor, you could choose to put this in the constructor instead; personal preference
    A.addItem(new door(B));
    B.addItem(new door(A));
}

【讨论】:

  • @BobMonkeywarts:很高兴这个答案对您有所帮助(1+)。顺便说一句,你会想要学习和使用Java naming conventions。变量名应全部以小写字母开头,而类名应以大写字母开头。此外,您应该避免使用诸如bs 之类的琐碎变量名称,除非它们被用于琐碎目的,例如for 循环的索引。而是使用具有某种含义的名称,以便您的代码能够自我注释。
【解决方案2】:

你需要在A和B都初始化后设置A的项目。例如:

public room A = new room();
public room B = new room();
{
    B.setItems(new items[] {A});
    A.setItems(new items[] {B});
}

【讨论】:

    猜你喜欢
    • 2015-03-11
    • 2014-12-24
    • 2011-10-11
    • 2013-09-04
    • 1970-01-01
    • 1970-01-01
    • 2011-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多