假设我有一个总会返回带有0或1个对象的列表的方法:(永远不会返回null)
public List<Object> getList() {
List<Object> list = new ArrayList<Object>();
if (someCriteria) {
list.add("1");
}
return list;
}
这两个代码之间有什么区别吗?
public Object getFirstElement() {
List<Object> list = getList();
return(getList().get(0));
}
与
public Object getFirstElement() {
List<Object> list = getList();
if (!CollectionUtils.isEmpty(list)
return list.get(0);
return null;
}
答案 0 :(得分:1)
是的。
在第一种情况下,如果某些creteria为false,list
为空列表:
import java.util.List; import java.util.ArrayList;
public class Test {
boolean someCriteria = false;
public static void main(String[] args) {
new Test().getFirstElement();
}
public List<Object> getList() {
List<Object> list = new ArrayList<Object>();
if (someCriteria) {
list.add("1");
}
return list;
}
public Object getFirstElement() {
List<Object> list = getList();
return(getList().get(0));
}
}
你得到一个例外:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.rangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at Test.getFirstElement(Test.java:29)
at Test.main(Test.java:13)
在第二种情况下,功能返回null
。
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.collections.CollectionUtils;
public class Test {
boolean someCriteria = false;
public static void main(String[] args) {
System.out.println(new Test().getFirstElement());
}
public List<Object> getList() {
List<Object> list = new ArrayList<Object>();
if (someCriteria) {
list.add("1");
}
return list;
}
public Object getFirstElement() {
List<Object> list = getList();
if (!CollectionUtils.isEmpty(list))
return list.get(0);
return null;
}
}
输出:
null