CheckStyleに怒られずに、要素が一つのCollectionオブジェクトを作る

CheckStyleに怒られずに、要素が一つのCollectionオブジェクトを作る

IDEのCheckStyleに怒られる

例えばTestクラスで、Collection型のオブジェクトを作るときってどうしていますか?
恐らくArrays.asList()メソッドで値を詰めているかと思います。
しかし、要素が一つの場合のCollection型のオブジェクトを作るときはどうしますか?
同じようにArrays.asList()使いますか?

@Data
@Builder
public class Address {
    String address;
    String district;
}

こういうEntityクラスがあるとしてSet型に要素一つだけ詰める場合に、

Set<Address> params = new HashSet<>(Arrays.asList(Address.builder()
                .address("fashion 109")
                .district("Shibuya")
                .build()));

こういう詰め方をするとCheckStyleで怒られます。

Call to 'asList' with only one argument

ということで2通りの怒られない詰め方です。

Collections.singletonList()

 Set<Address> params = new HashSet<>(Collections.singletonList(Address.builder()
                .address("fashion 109")
                .district("Shibuya")
                .build()));

要素を一つだけ格納できます。
あとからListの中身は変更不可です。

List.of()

Set<Address> params = new HashSet<>(List.of(Address.builder()
                .address("fashion 109")
                .district("Shibuya")
                .build()));

要素をいくつでも詰め込めますが、一つでもCheckStyleに怒られません。
あとからListの中身は変更不可です。
※Java9以降で使用可能です。

まとめ

どちらにしてもListの中は変更不可になってしまうので、
Testで使用する分には問題無いと思いますが、プロダクトコードでは考慮が必要です。
Java9以降であればList.of()メソッドを使ったほうがいいです。

プログラミングカテゴリの最新記事