初始化由函数Java for android检索的类

时间:2014-12-22 18:39:34

标签: java android class methods

关于stackoverflow的第一个问题:

好的,我正在为Android编写一个java游戏,我在初始化从函数/方法中检索的某些类时遇到了麻烦。这是我的代码:

static int unUsedCharacters = 10;
static Character char1;
static Character char2;
static Character char3;
static Character char4;
static Character char5;
static Character char6;
static Character char7;
static Character char8;
static Character char9;
static Character char10;

Character getFreeCharacter() {
        if (char1 == new Character()) {
            return char1;
        } else if (char2 == new Character()) {
            return char2;
        // and so on... until 10
        } else {
            return char10;
        }
    }

    public void createCharacter(String x) {
        if (unUsedCharacters > 0) {
            unUsedCharacters -= 1;
            getFreeCharacter() = new Warrior(); 
            //the warrior class extends the character class
        } else {
            /* no more characters */
        }
    }

所以问题出在我尝试的地方:

    getFreeCharacter() = new Warrior();

它说:

  

预期的变量。

有什么建议吗? (这很容易,但这对我来说都是新的)

感谢您阅读/回复

1 个答案:

答案 0 :(得分:1)

此表格的表达......

 (char1 == new Character())

...将总是评估为false(或抛出异常)。 new运算符永远不会生成null结果,并且它永远不会生成对之前存在的对象的引用,但这些备选方案随时会覆盖char1的所有可能值。你更希望得到这样的东西:

if (char1 == null) {
    char1 = new Character();
    return char1;
}

事实上,我永远不会在十个自变量中保留十个字符。我可能会使用List Character,或者最糟糕的是数组。

过了那个,你有一个不同的问题。您返回的Character已经是分配给预期插槽的对象。您可以设置其属性(在其类允许的范围内),但您不能通过分配给它来替换它。实际上,您根本无法直接分配给方法结果,但即使您将其存储在变量中,为该变量分配不同的对象也不会产生您想要的效果。

(顺便说一句,请注意,我区分了方法返回值的成员,你可以做,并分配给你自己不能做的值。)< / p>

我认为你最好完全摆脱getFreeCharacter()。如果你更好地构建你的课程,那么你就不会需要它。而不是如此声明char1 ... char10

// Yuck, don't do this
Character char1;
Character char2;
// ...
Character char1;

...按照我之前的建议做,并使用List

import java.util.ArrayList;
import java.util.List;

public MyGame {

    List<Character> characters = new ArrayList<>();

    // ...

}

然后,您的createCharacter()方法可以采用以下格式:

public void createCharacter(String x) {
    if (characters.size() < 10) {
        characters.add(new Warrior()); 
    } else {
        /* no more characters */
    }
}

在其他地方,您可以通过get()方法检索字符列表的元素,例如characters.get(0)List实例会处理大量您必须编写自己代码的详细信息。