2016-05-28 55 views
2

您能告訴我使用getTheLastElement2()而不是getTheLastElement()的優點(如果有任何優勢)嗎?我的意思是,爲什麼僅在返回結果時更容易創建參考obj從java中的列表中返回一個元素

import java.util.ArrayList; 
     import java.util.List; 

public class Test { 
    List list; 

    Test(ArrayList list){ 
     this.list = list; 
    } 

    public Object getTheLastElement(){ 
     if (list.isEmpty()) 
      return null; 
     else 
      return list.get(list.size()-1); 
    } 

    public Object getTheLastElement2(){ 
     Object obj; 
     if (list.isEmpty()) 
      obj = null; 
     else 
      obj = list.get(list.size()-1); 
     return obj; 
    } 
} 
+0

兩種方法都行不通的。 –

+1

您必須返回大小爲1的元素,而不僅僅是大小。 – Kajal

+0

您可能還想看看http://stackoverflow.com/questions/36707/should-a-function-have-only-one-return-statement,其中討論了具有單個出口點vs函數中的多個退出點。在你的代碼示例中,我會建議'getTheLastElement()'更具可讀性,如果沒有'else'語句就更好了。 – mhawke

回答

2

這兩種實現沒有區別:obj引用可能會被優化掉。

在調試代碼時,您會獲得輕微的優勢,因爲您可以在語句getTheLastElement2上設置斷點,並且知道它總是會被命中。這與getTheLastElement形成對照,您需要兩個斷點來檢查返回值。

注意else在第一個例子是多餘的:

public Object getTheLastElement(){ 
    if (list.isEmpty()) { 
     return null; 
    } 
    return list.get(list.size()-1); 
} 

你可以進一步萎縮這一個三元表達式:

public Object getTheLastElement(){ 
    return !list.isEmpty() ? list.get(list.size()-1) : null; 
} 
+0

會影響執行時間嗎? – webpersistence

+0

@rEx不,它是多餘的,將被編譯器消除。在執行速度方面,這些都是平等的。 – dasblinkenlight

1

不,沒有優勢。此外,您應該返回list.get(list.size()-1)

相關問題