我想知道当我输出什么应该是一个非常好的方法时要考虑什么,但它不会被认为是一种方法。在这里。
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;
但这似乎并没有帮助我。
感谢您的任何指示。
答案 0 :(得分:1)
编译器抱怨您的gobj
未被声明为GObject
。它实际上是一个实例是什么并不重要,它需要被声明为返回类型(或其子类/实现的类或接口之一)或成功地转换为这样。
什么是gobj
声明为?
编辑:
当然,您需要确保在每种情况下都有一个return语句。
如果您的所有if
语句都评估为false
,则您没有默认值。
答案 1 :(得分:1)
我发现你的功能存在一些问题;首先,您不在方法体中声明gobj
。你在别处发表评论让我觉得你正在尝试return
这个班级的数据成员;至少可以说这是奇怪的设计。 (通常,目标是让每种方法尽可能独立。如果您正在共享这样的数据,则可能会引入以后难以找到的错误。)
你的函数总是返回数据 - 有时它会在没有显式return
语句的情况下脱离函数的末尾。 你可能知道这四个条件中的一个总是正确的,但是编译器不会 - 而且老实说,它会是正确的,因为你将来不可避免地会破坏这个条件。
这段代码难以以更美观的方式编写。 (好吧,如果Java的||
operator也与null
一起使用,这可能是一个非常漂亮的短函数。但Java的||
仅适用于true
和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
。