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

标签 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();

它说:

Variable expected.

有什么建议吗? (这可能 super 简单,但这对我来说是全新的)

感谢您阅读/回复

最佳答案

这种形式的表达...

 (char1 == new Character())

...将总是评估为false(或抛出异常)。 new 运算符永远不会产生 null 结果,也永远不会产生对之前存在的对象的引用,但是这些替代方案涵盖了 char1< 的所有可能值 在任何时候。您更有可能想要这样的东西:

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

但事实上,我永远不会把十个字符放在十个自变量中。我可能会使用 CharacterList,或者在最坏的情况下使用数组。

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

(请注意,顺便说一句,我要区分分配给方法返回值的成员,你可以这样做,和分配给值本身,你不能这样做。)

我认为您最好完全摆脱 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 实例负责处理大量细节,否则您将不得不为其编写自己的代码。

关于java - 初始化由函数 Java for android 检索的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27608536/

相关文章:

java - IntelliJ Build 不执行 sbt 'compile' 依赖

android - 先按下不允许后如何授予对 react-native-camera 的访问权限?

android - Kotlin/Android - 获取 onBindViewHolder Item 中生成的按钮的 ID

ios - 从另一个类的 IBOutlet 获取值

java - 预熔 : Adding edge weights to the GraphView Demo

java - 多个按钮?

java - 如何使用 java swing 在 JButton 上随机显示图像?

java - 创建时间轴 Android 应用程序

javascript - 使用具有多个类的 jquery 选择元素

javascript - 为什么高阶函数隐藏我的 ES6 类属性?