2016-05-28 59 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)

相关问题