2012-07-24 67 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不管你走的路,通過該功能。

相關問題