2012-07-24 26 views
1

我想知道当我输入什么应该是一个非常好的方法时应该考虑什么,但它没有得到公认为一种方法。这里是。此方法必须返回类型为GObject的结果 - 但只是看 - 我告诉它 -

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

您将'private GObject gobj'声明为实例变量确实可以帮助您,尽管不是您想要的方式。由于您在方法中使用它时没有定义'gobj',因此它会自动使用实例变量'gobj' - 如果您没有这个,它会抱怨它不知道'gobj'是什么。但是这意味着你从一个也修改它的方法返回一个实例变量,你通常不想这样做。 – Edward 2012-07-24 03:51:37

+0

*“...这是它通常告诉我它对我的工作满意的方式”* - 将欲望和情绪归因于您的工具是不健康的。 – 2012-07-24 04:21:51

回答

1

编译器抱怨说您的gobj未声明为GObject。无论它实际是一个实例,它都需要被声明为返回类型(或其子类型/实现的类或接口之一)或成功地进行转换。

什么是gobj声明为?

编辑: 和当然,你需要确保有一个return语句用于在任何情况下。 如果您的所有if语句评估为false,那么您没有默认设置。

+0

请注意,评论中的代码是不值得的麻烦;请编辑您的原始问题... – sarnold 2012-07-24 03:21:02

+0

aha - 修复条件以查看是否可以解决事情......它的确如此!它做了!所以,教训是,如果你的方法没有完整的条件,那么它就不会被认为是一种方法。谢谢! – dwilbank 2012-07-24 03:24:34

1

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

您的功能始终没有返回数据 - 有时只是在没有明确的return语句的情况下从功能的末尾落下。 可能知道的这四个条件中的一个将永远是真实的,但编译器不 - 和诚实,这将是正确的,因为你会不可避免地突破,在未来的条件。

此代码是困难的方式,使得它更美丽写。 (好吧,如果Java的|| operatornull工作为好,这可能是一个非常漂亮的短的功能,但是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不管你走的路,通过该功能。

相关问题