Daftar Java UnsupportedOperationException

1. Gambaran keseluruhan

Dalam tutorial ringkas ini, kita akan membincangkan Pengecualian umum yang dapat terjadi ketika bekerja dengan beberapa API implementasi Daftar yang paling - UnsupportedOperationException .

A java.util.List mempunyai lebih banyak fungsi daripada satu yang biasa rray boleh menyokong. Sebagai contoh, dengan hanya satu kaedah panggilan terpasang, mungkin untuk memeriksa apakah elemen tertentu ada di dalam struktur. Itulah sebabnya mengapa kita kadang-kadang perlu menukar larik menjadi Senarai atau Koleksi .

Untuk pengenalan pelaksanaan Java List teras - ArrayList - sila rujuk artikel ini.

2. Pengecualian Tidak DisokongOperasi

Cara yang kerap berlaku ralat ini adalah ketika kita menggunakan kaedah asList () dari java.util.Arrays:

public static List asList(T... a)

Ia kembali:

  • Senarai ukuran tetap dari ukuran array yang diberikan
  • unsur jenis yang sama dengan elemen dalam susunan asal dan mestilah Objek
  • unsur dalam susunan yang samaseperti dalam susunan asal
  • senarai yang bersiri dan melaksanakan RandomAccess

Oleh kerana T adalah varargs , kita dapat meneruskan array atau item secara langsung sebagai parameter, dan kaedahnya akan membuat senarai berinisial ukuran tetap:

List flowers = Arrays.asList("Ageratum", "Allium", "Poppy", "Catmint");

Kami juga boleh menyampaikan susunan sebenar :

String[] flowers = { "Ageratum", "Allium", "Poppy", "Catmint" }; List flowerList = Arrays.asList(flowers);

Sejak kembali Senarai adalah bersaiz tetap List , kita tidak boleh menambah / elemen keluarkan .

Percubaan untuk menambahkan lebih banyak elemen akan menyebabkan UnsupportedOperationException :

String[] flowers = { "Ageratum", "Allium", "Poppy", "Catmint" }; List flowerList = Arrays.asList(flowers); flowerList.add("Celosia");

Akar Pengecualian ini adalah bahawa objek yang dikembalikan tidak melaksanakan operasi tambah () kerana ia tidak sama dengan java.util.ArrayList.

Ini ArrayList , dari java.util.Arrays.

Cara lain untuk memperoleh pengecualian yang sama adalah dengan mencuba mengeluarkan elemen dari senarai yang diperoleh.

Sebaliknya, ada cara untuk mendapatkan yg mungkin berubah Senarai dalam kes kita memerlukannya.

Salah satunya ialah membuat ArrayList atau senarai apa pun secara langsung dari hasil asList () :

String[] flowers = { "Ageratum", "Allium", "Poppy", "Catmint" }; List flowerList = new ArrayList(Arrays.asList(flowers));

3. Kesimpulannya

Sebagai kesimpulan, penting untuk memahami bahawa menambahkan lebih banyak elemen ke dalam senarai boleh menjadi masalah untuk lebih daripada sekadar senarai yang tidak berubah.

Seperti biasa, kod sumber penuh contoh terdapat di GitHub.