这两个代码之间有什么区别吗?

时间:2017-04-19 10:49:25

标签: java

假设我有一个总会返回带有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;
}

1 个答案:

答案 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