为什么我的Set to List转换抛出空指针异常?

时间:2015-08-12 17:48:18

标签: java arraylist nullpointerexception set

Set<String> something = null;
List<String> = new ArrayList<>(something);

此代码抛出NullPointerException。有没有更好的方法进行转换?

2 个答案:

答案 0 :(得分:2)

NullPointerException Javadoc specifies,因为它试图将不存在的集合转换为ArrayList

  

公开ArrayList(Collection<? extends E> c)

     

按照集合迭代器返回的顺序构造一个包含指定集合元素的列表。

     

参数:

     
      
  • c - 要将其元素放入此列表的集合
  •   
     

抛出:

     
      
  • NullPointerException - 如果指定的集合是null
  •   

为什么不实际制作Set对象?尝试:

Set<String> something = new HashSet<>();
List<String> stringList = new ArrayList<>(something);

如果您希望在somethingnull时制作一个空列表,请尝试:

List<String> stringList =
         something == null ? new ArrayList<>() : new ArrayList<>(something);

答案 1 :(得分:0)

如果您希望在set为null时列表为null,请尝试:

Set<String> something = //Something..... either null or not null
List<String> somethingList = something == null ? null : new ArrayList<>(something);

空指针异常的原因是ArrayList(Collection<? extends T> collection)构造函数(您正在调用的构造函数)尝试迭代传入的集合。由于该集合为null,您当然会点击空指针。