如果列表为空,则在apply.contains格式化日期时会抛出异常

时间:2018-05-09 07:37:31

标签: java list

 List<String> Lst = List;
 Calendar today = Calendar.getInstance(); 
 SimpleDateFormat df = new SimpleDateFormat("dd/MM/yy");
    if(null == Lst){
                Lst = new ArrayList<String>();
    }
    if(!Lst .contains(df.format(today.getTime()))) {
            System.out.println("...");
    }
如果Lst为空,

会抛出异常吗?

3 个答案:

答案 0 :(得分:1)

我想提供代码的现代版本:

    List<LocalDate> lst = null;

    LocalDate today = LocalDate.now(ZoneId.of("Asia/Ashkhabad"));
    if (lst == null) {
        lst = new ArrayList<>();
    }
    System.out.println("Contains today? " + lst.contains(today));
    System.out.println("Empty? " + lst.isEmpty());

请输入您放置亚洲/阿什哈巴德所需的时区。刚打印的代码:

Contains today? false
Empty? true

所以不,没有抛出异常。列表 为空。

另一种找出方法是阅读文档。对于List.contains,它说:

  

如果此列表包含指定的元素,则返回true。更多   正式地,当且仅当此列表至少包含时,才返回true   一个元素e,使Objects.equals(o, e)

空列表不包含这样的元素,因此我们应该期望返回false。当然,请继续阅读:

  

<强>抛出:

     

ClassCastException - 如果指定元素的类型是   与此列表不兼容(可选)

     

NullPointerException - 如果指定的元素为null且为此   list不允许null元素(可选)

如果列表是空的,则抛出任何异常,如果没有其他地方,这里就会提到它。事实并非如此。因此,当列表为空并且您测试contains时,列表不得抛出任何异常。

java.time

我说我给了你现代版的代码。您使用的课​​程CalendarDateSimpleDateFormat已经过时且设计不佳。相反,我使用了来自LocalDate的{​​{1}},即现代Java日期和时间API。虽然在列表中保留java.time个对象会有问题,因为相等的标准既严格又复杂,拥有Calendar个对象列表是有利的。 LocalDate是一个没有时间的日期,所以相等很简单:如果它们表示同一天,则两个这样的对象是相等的。我是否记得曾说过LocalDate与旧班相比,工作得更好?

链接

答案 1 :(得分:0)

如果在空列表上调用contains,则代码不会抛出异常。只有在未初始化列表的情况下才会收到异常(NullPointerException)。

无论如何,如果没有“List”,代码段中的代码将无法编译 - 由于第一行,列表实例可用于其余代码。

答案 2 :(得分:0)

List<String> myList = new ArrayList<>();

        DateFormat df = new SimpleDateFormat("DD/MM/Y");

        if(myList.isEmpty()){
            System.out.println("List Empty");
        }
        myList.add(0,"08/04/2018");

        System.out.println("Date Format ::" + myList.get(0));