1. ホーム
  2. Java

Java小ネタ:Listはadd(null)できる?

2022-02-23 21:04:34
<パス

コードを書いていると、時々forループに遭遇し、その下を書くのに少し躊躇することがあります。

List<Data> dataList = ... ;
for (Data d : dataList) {
    if (d ! = null) { // Do I need this judgment?
        // ...
    }
}


トラバース時に、各要素に対してnullを判定する必要があるのでしょうか?言い換えれば、Listでnullの追加を許可することは可能でしょうか?
そこで、少し実験してみたところ、意外と可能であることがわかりました。(今までの理解では、nullを追加することはおそらく起こらないと思っていました)。

static class Data {
    String mName;
    public Data(String s) {
        this.mName = s;
    }

    @Override
    public String toString() {
        return "Data:" + mName;
    }
}

public static void main(String[] args) {
    List<Data> dataList = new ArrayList<>();
    dataList.add(null);
    dataList.add(new Data("shit"));
    System.out.println(dataList.size()); // Here the output is 2

    for (Data d : dataList) {
        System.out.println(d.mName); // here will be null pointer exception
    }
}


さて、これで疑問が解消されましたね。トラバースの際には、各要素をnullにすることが肝心です。

参照
ArrayListがNullを追加できる理由について https://softwareengineering.stackexchange.com/questions/163489/why-does-java-util-arraylist-allow-to-add-null