Pada dasarnya saya memiliki ArrayList lokasi:
ArrayList<WorldLocation> locations = new ArrayList<WorldLocation>();
di bawah ini saya sebut metode berikut:
.getMap();
parameter dalam metode getMap () adalah:
getMap(WorldLocation... locations)
Masalah yang saya alami adalah saya tidak yakin bagaimana cara memasukkan dalam daftar SELURUH locations
ke dalam metode itu.
Saya sudah mencoba
.getMap(locations.toArray())
tetapi getMap tidak menerimanya karena tidak menerima Objek [].
Sekarang jika saya gunakan
.getMap(locations.get(0));
ini akan bekerja dengan sempurna ... tapi saya harus melewati SEMUA lokasi ... saya tentu saja bisa membuat terus menambahkan locations.get(1), locations.get(2)
dll tetapi ukuran array bervariasi. Saya hanya tidak menggunakan seluruh konsep dariArrayList
Apa cara termudah untuk melakukannya? Saya merasa seperti saya tidak berpikir jernih saat ini.
java
variadic-functions
MJ93
sumber
sumber
Jawaban:
Sumber artikel: Melewati daftar sebagai argumen ke metode vararg
Gunakan
toArray(T[] arr)
metodenya.(
toArray(new WorldLocation[0])
juga berfungsi, tetapi Anda akan mengalokasikan array panjang nol tanpa alasan.)Ini contoh lengkapnya:
sumber
someMethod(someList.toArray(new ArrayList<Something>[someList.size()]))
akan memberi Anda peringatan yang sangat menjengkelkan jika fungsinya lebih dari beberapa baris (karena Anda bisa menekannya untuk seluruh fungsi atau Anda harus membuat array dalam langkah tambahan dan menekan peringatan pada variabel yang Anda simpanDi Jawa 8:
sumber
locations.toArray(WorldLocations[]::new)
juga tampaknya berfungsi sejak java 11 (Tanpa.stream()
)Versi pendek dari jawaban yang diterima menggunakan Guava:
dapat dipersingkat lebih lanjut dengan mengimpor secara statis ke Array:
sumber
Anda dapat melakukan:
atau
atau
@SuppressWarnings("unchecked")
diperlukan untuk menghapus ide peringatan.sumber