Daftar Java UnsupportedOperationException

1. Ikhtisar

Dalam tutorial singkat ini, kita akan membahas Pengecualian umum yang dapat terjadi saat bekerja dengan beberapa API dari sebagian besar implementasi Daftar - UnsupportedOperationException .

Sebuah java.util.List memiliki fungsi lebih dari satu biasa RRay dapat mendukung. Misalnya, dengan hanya satu panggilan metode bawaan, dimungkinkan untuk memeriksa apakah ada elemen tertentu di dalam struktur. Itu biasanya mengapa terkadang kita perlu mengonversi larik menjadi Daftar atau Koleksi .

Untuk pengantar implementasi inti Daftar Java - ArrayList - lihat artikel ini.

2. UnsupportedOperationException

Cara yang sering terjadi kesalahan ini adalah ketika kita menggunakan metode asList () dari java.util.Arrays:

public static List asList(T... a)

Ia mengembalikan:

  • Daftar ukuran tetap sebagai ukuran larik yang diberikan
  • elemen dengan tipe yang sama seperti yang ada di array asli dan harus berupa Objek
  • elemen dalam urutan yang samaseperti pada larik asli
  • daftar yang dapat bersambung dan mengimplementasikan RandomAccess

Karena T adalah vararg , kita bisa meneruskan array atau item secara langsung sebagai parameter, dan metode ini akan membuat daftar yang diinisialisasi dengan ukuran tetap:

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

Kami juga dapat mengirimkan array yang sebenarnya :

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

Karena kembali Daftar adalah berukuran tetap Daftar , kita tidak dapat menambahkan / elemen menghapus .

Upaya untuk menambahkan lebih banyak elemen akan menyebabkan UnsupportedOperationException :

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

Akar dari Pengecualian ini adalah bahwa objek yang dikembalikan tidak mengimplementasikan operasi add () karena tidak sama dengan java.util.ArrayList.

Ini adalah ArrayList , dari java.util.Arrays.

Cara lain untuk mendapatkan pengecualian yang sama adalah dengan mencoba menghapus elemen dari daftar yang diperoleh.

Di sisi lain, ada cara untuk mendapatkan List yang bisa berubah jika kita membutuhkannya.

Salah satunya adalah membuat ArrayList atau daftar jenis apa pun langsung dari hasil asList () :

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

3. Kesimpulan

Sebagai kesimpulan, penting untuk dipahami bahwa menambahkan lebih banyak elemen ke daftar dapat menjadi masalah bagi lebih dari sekadar daftar yang tidak dapat diubah.

Seperti biasa, kode sumber lengkap dari contoh tersedia di GitHub.