Saya bisa menulis:
AClass[] array = {object1, object2}
Saya juga bisa menulis:
AClass[] array = new AClass[2];
...
array[0] = object1;
array[1] = object2;
tapi saya tidak bisa menulis:
AClass[] array;
...
array = {object1, object2};
Mengapa ini diblokir oleh Java?
Saya tahu bagaimana cara mengatasinya, tetapi dari waktu ke waktu akan lebih mudah.
Sebagai contoh:
public void selectedPointsToMove(cpVect coord) {
if (tab == null) {
if (arePointsClose(coord, point1, 10)) {
cpVect[] tempTab = {point1};
tab = tempTab;
} else if (arePointsClose(point2, coord, 10)) {
cpVect[] tempTab = {point2};
tab = tempTab;
} else {
cpVect[] tempTab = {point1,point2};
tab = tempTab;
}
}
}
Pertanyaan sederhana ini yang telah mengganggu saya sejak saya belajar cara bermain dengan array di Jawa.
Jawaban:
Anda harus bertanya pada desainer Java. Mungkin ada beberapa alasan tata bahasa yang halus untuk pembatasan ini. Perhatikan bahwa beberapa konstruksi pembuatan / inisialisasi array tidak di Java 1.0, dan (IIRC) ditambahkan di Java 1.1.
Tetapi "mengapa" tidak penting ... pembatasan ada di sana, dan Anda harus hidup dengannya.
Anda dapat menulis ini:
sumber
{o1()}
itu ekspresi yang valid dan{o1();}
blok pernyataan yang valid. Parser harus menuju ke '}' atau ';' sebelum dapat membedakan kedua kasus tersebut. Masalah tata bahasanya tidak halus sama sekali !!Saya akan mencoba menjawab pertanyaan mengapa: Java array sangat sederhana dan belum sempurna dibandingkan dengan kelas-kelas seperti ArrayList, yang lebih dinamis. Java ingin tahu pada waktu deklarasi berapa banyak memori yang harus dialokasikan untuk array. ArrayList jauh lebih dinamis dan ukurannya dapat bervariasi dari waktu ke waktu.
Jika Anda menginisialisasi array Anda dengan panjang dua, dan kemudian ternyata Anda membutuhkan panjang tiga, Anda harus membuang apa yang Anda punya, dan membuat array baru. Karenanya kata kunci 'baru'.
Dalam dua contoh pertama Anda, Anda memberi tahu pada waktu deklarasi berapa banyak memori yang dialokasikan. Pada contoh ketiga Anda, nama array menjadi pointer ke nothing, dan karena itu, ketika diinisialisasi, Anda harus secara eksplisit membuat array baru untuk mengalokasikan jumlah memori yang tepat.
Saya akan mengatakan itu (dan jika seseorang lebih tahu, tolong perbaiki saya) contoh pertama
sebenarnya berarti
tetapi apa yang dilakukan oleh desainer Java, adalah membuat cara yang lebih cepat untuk menulisnya jika Anda membuat array pada waktu deklarasi.
Solusi yang disarankan baik. Jika waktu atau penggunaan memori sangat penting saat runtime, gunakan array. Jika tidak kritis, dan Anda menginginkan kode yang lebih mudah dipahami dan digunakan, gunakan ArrayList.
sumber
{
dan}
... seperti halnya untuk form initializer yang diizinkan.Saya tidak bisa menjawab bagian mengapa.
Tetapi jika Anda menginginkan sesuatu yang dinamis, mengapa Anda tidak mempertimbangkan Collection ArrayList.
ArrrayList dapat berupa jenis Obyek apa pun.
Dan jika sebagai keharusan Anda menginginkannya sebagai array, Anda dapat menggunakan metode toArray () di atasnya.
Sebagai contoh:
Saya harap ini dapat membantu Anda.
sumber
Bagi Anda, yang tidak menyukai
new AClass[] { ... }
sintaksis mengerikan ini , inilah beberapa gula:Gunakan fungsi kecil ini sesuka Anda:
sumber