【Java】ListでUnsupportedOperationExceptionが発生

目次

UnsupportedOperationExceptionが発生

Springboot + hibernate + Junit + Mockito でテストを作成しているときにUnsupportedOperationExceptionが発生した。

StackTraceを見るとList.clear()の箇所で発生しているらしい。

発生個所はbag.clear()をしている箇所(hibernate周り?)でデバッグで見ても、データもあるし何ら悪いことはしてないと判断。OneToManyとかで関連持たせているところを見てみても大丈夫そうなので途方に暮れていた。

Arrays.asList()が原因

テストデータだからとArrays.asList()でテストデータを用意していたのが原因だった。調べてみるとArrays.asList()で作成したListは固定長で、変更などは反映するがadd()やremove()をするとUnsupportedOperationExceptionが発生するらしい。

new ArrayList(Arrays.asList())ならOK

フレームワークなどで意図しないようなListの操作が入る場合もあるので、そういった場所ではArrays.asList()をArrayList等のListサブクラスでインスタンス化してやれば大丈夫らしいので、もし発生したらそのように対応する方が良いかも。

Arrays.asList()を知ってから便利なものだと思って何も考えずに使っていた。。。

List.of()使いたいな。。。