这个方法必须返回GObject类型的结果 - 但只是看 - 我告诉它 -

时间:2012-07-24 03:13:59

标签: java

我想知道当我输出什么应该是一个非常好的方法时要考虑什么,但它不会被认为是一种方法。在这里。

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;

但这似乎并没有帮助我。

感谢您的任何指示。

2 个答案:

答案 0 :(得分:1)

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

什么是gobj声明为?

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

答案 1 :(得分:1)

我发现你的功能存在一些问题;首先,您不在方法体中声明gobj。你在别处发表评论让我觉得你正在尝试return这个班级的数据成员;至少可以说这是奇怪的设计。 (通常,目标是让每种方法尽可能独立。如果您正在共享这样的数据,则可能会引入以后难以找到的错误。)

你的函数总是返回数据 - 有时它会在没有显式return语句的情况下脱离函数的末尾。 可能知道这四个条件中的一个总是正确的,但是编译器不会 - 而且老实说,它会是正确的,因为你将来不可避免地会破坏这个条件。

这段代码难以以更美观的方式编写。 (好吧,如果Java的|| operator也与null一起使用,这可能是一个非常漂亮的短函数。但Java的||仅适用于truefalse 。)

重写该功能的最简单方法可能是在最后一次尝试后删除后卫:

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