Katakanlah saya memiliki metode m () yang menggunakan array String sebagai argumen. Apakah ada cara saya bisa mendeklarasikan array ini secara in-line ketika saya melakukan panggilan? yaitu Alih-alih:
String[] strs = {"blah", "hey", "yo"};
m(strs);
Bisakah saya mengganti ini dengan satu baris, dan menghindari mendeklarasikan variabel bernama yang saya tidak akan pernah gunakan?
Jawaban:
sumber
Draemon benar. Anda juga dapat mendeklarasikan
m
sebagai mengambil varargs :sumber
void m(String... strs, Integer... intgrs)
misalnya.void m(Integer i, Double d, String... str)
(String ... strs)
Cara lain untuk melakukannya, jika Anda ingin hasilnya sebagai Daftar inline, Anda dapat melakukannya seperti ini:
sumber
Arrays.asList("string1", "string2", ...)
List
ditype[]
manatype
primitif itu. misalnyaArrays.asList([some ints])
menghasilkan aList<int[]>
.set
yang dikembalikanList
dan itu akan mengubah array.Anda dapat langsung menulis array di Jawa modern, tanpa inisialisasi. Contoh Anda sekarang valid. Biasanya yang terbaik adalah memberi nama parameter.
atau
Jika harus inline, Anda harus mendeklarasikan jenisnya:
atau gunakan varargs (argumen variabel)
Semoga pengembang Java akan memungkinkan inisialisasi implisit di masa depan
Pembaruan: Jawaban Kotlin
Kotlin telah membuat bekerja dengan array jauh lebih mudah! Untuk sebagian besar tipe, cukup gunakan
arrayOf
dan itu akan secara implisit menentukan tipe. Berikan apa-apa agar kosong.Primitif memiliki fungsi utilitas. Berikan apa-apa agar kosong.
Jika Anda sudah memiliki
Collection
dan ingin mengubahnya menjadi array inline, cukup gunakan:Jika Anda perlu memaksa jenis array, gunakan:
sumber
doSomething({"blah", "hey", "yo"})
, yang merupakan pertanyaan asli yang ditanyakan.Anda dapat membuat metode di suatu tempat
lalu gunakan itu
untuk tampilan yang lebih baik.
sumber
Saya ingin menambahkan bahwa sintaks inisialisasi array sangat ringkas dan fleksibel. Saya menggunakannya BANYAK untuk mengekstrak data dari kode saya dan menempatkannya di tempat yang lebih dapat digunakan.
Sebagai contoh, saya sering membuat menu seperti ini:
Ini akan memungkinkan saya untuk menulis kode datang untuk mengatur sistem menu. "+" Sudah cukup untuk membuatnya menempatkan item itu di bawah item sebelumnya.
Saya bisa mengikatnya ke kelas menuHandler baik dengan metode penamaan konvensi dengan menamai metode saya seperti "menuFile, menuFileSave, menuFileLoad, ..." dan mengikat mereka secara reflektif (ada alternatif lain).
Sintaks ini memungkinkan definisi menu singkat yang LUAR BIASA dan metode "initMenus" yang dapat digunakan kembali. (Namun saya tidak repot menggunakannya kembali karena selalu menyenangkan untuk menulis dan hanya membutuhkan beberapa menit + beberapa baris kode).
setiap kali Anda melihat pola dalam kode Anda, lihat apakah Anda dapat menggantinya dengan sesuatu seperti ini, dan selalu ingat betapa ringkas sintaks inisialisasi array!
sumber
Pilihan lain adalah menggunakan ArrayUtils.toArray di org.apache.commons.lang3
sumber
Seperti yang dikatakan Draemon, yang paling dekat dengan Java dalam array inline adalah
new String[]{"blah", "hey", "yo"}
ada trik yang memungkinkan Anda untuk melakukan sesuatu sepertiarray("blah", "hey", "yo")
dengan tipe yang disimpulkan secara otomatis.Saya telah bekerja pada API yang berguna untuk menambah bahasa Java untuk memungkinkan array inline dan tipe koleksi. Untuk detail lebih lanjut, proyek google Espresso4J atau lihat di sini
sumber