1

我想知道当我输入什么应该是一个非常好的方法时会怎么想,但它并没有被认为是一种方法。这里是。

private GObject getCollidingObject() {
    gobj = getElementAt(ball.getX(),ball.getY());
    if (gobj != null) {
        return gobj;
    }
    gobj = getElementAt(ball.getX()+BALL_RADIUS,ball.getY());
    if (gobj != null) {
        return gobj;
    }
    gobj = getElementAt(ball.getX(),ball.getY()+BALL_RADIUS);
    if (gobj != null) {
        return gobj;
    }
    gobj = getElementAt(ball.getX()+BALL_RADIUS,ball.getY()+BALL_RADIUS);
    if (gobj != null) {
        return gobj;
    }
}

现在 eclipse 告诉我“这个方法必须返回 GObject 类型的结果”,并且没有以紫色突出显示 GObject,这是它通常告诉我它对我的工作感到满意的方式。

我应该在想什么?我仔细查看了所有开闭括号,所有其他方法都在工作,所以我认为我没有将此方法放在错误的范围内......

在我所有其他实例变量的程序底部,我有

private GObject gobj;

但这似乎对我没有帮助。

感谢您的任何指示。

4

2 回答 2

2

我发现您的功能存在一些问题;首先,您不在gobj方法体内声明。您在其他地方发表了评论,让我认为您正在尝试return使用该类的数据成员;这是奇怪的设计,至少可以这么说。(通常,目标是让每个方法尽可能独立。如果您要共享这样的数据,您可能会引入以后难以发现的错误。)

您的函数并不总是return返回数据——有时它会在没有明确声明的情况下从函数末尾掉下来。可能知道这四个条件之一将始终为真,但编译器不知道 - 老实说,这将是正确的,因为您将来不可避免地会破坏该条件。

这段代码很难以一种更美观的方式编写。(好吧,如果 Java 的||运算符null可以使用,这可能是一个非常漂亮的短函数。但 Java||只能使用trueand false。)

重写函数最简单的方法可能是在最后一次尝试后移除保护:

private GObject getCollidingObject() {
    GObject gobj;

    gobj = getElementAt(ball.getX(),ball.getY());
    if (gobj != null) {
        return gobj;
    }
    gobj = getElementAt(ball.getX()+BALL_RADIUS,ball.getY());
    if (gobj != null) {
        return gobj;
    }
    gobj = getElementAt(ball.getX(),ball.getY()+BALL_RADIUS);
    if (gobj != null) {
        return gobj;
    }
    gobj = getElementAt(ball.getX()+BALL_RADIUS,ball.getY()+BALL_RADIUS);

    return gobj;
}

return这样,无论您通过该函数采用哪条路径,您都将至少执行一个。

于 2012-07-24T03:43:24.630 回答
1

编译器抱怨您gobj没有声明为GObject. 它实际上是一个实例并不重要,它需要被声明为返回类型(或其子类/实现的类或接口之一)或被成功转换为这样。

声明为什么gobj

编辑:当然,您需要确保在每种情况下都有一个 return 语句。if如果您的所有语句都评估为,则您没有默认值false

于 2012-07-24T03:16:36.883 回答