Apakah ada auto
tipe variabel di Java seperti yang Anda miliki di C ++?
Sebuah contoh:
for ( auto var : object_array)
std::cout << var << std::endl;
for( auto var : object_array)
var.do_something_that_only_this_particular_obj_can_do();
Saya tahu bahwa ada loop for yang disempurnakan di Java, tetapi apakah ada auto? Jika tidak, apakah ada cara untuk melakukan ini? Saya mengacu pada fitur baru di C ++ 11
Object
, jadi untuk beberapa operasi, Anda dapat menggunakan diObject
tempat yang Anda inginkanauto
.to_string
fungsi objek, dan bukan objek sebenarnya yang dimaksud, bukan?Jawaban:
Dijawab sebelum pertanyaan DIEDIT :
Tidak ada
auto
tipe variabel di Java. Loop yang sama dapat dicapai sebagai:Java memiliki variabel lokal, yang ruang lingkupnya berada di dalam blok tempat variabel tersebut telah ditentukan. Mirip dengan C dan C ++, tetapi tidak ada kata kunci otomatis atau daftar. Namun, kompilator Java tidak akan mengizinkan penggunaan variabel lokal yang tidak diinisialisasi secara eksplisit dan akan memberikan kesalahan kompilasi (tidak seperti C dan C ++ di mana kompilator biasanya hanya akan memberikan peringatan). Sumber: Wikipedia .
Tidak, tidak ada tipe-inferensi utama di Java seperti C ++. Ada RFE tetapi ditutup sebagai "Tidak akan diperbaiki", alasan yang diberikan adalah:
sumber
Object
) tidak dapat dilakukan seperti ini. Ini sebenarnya bukan jawaban yang bagus, ini hanya kebetulan berhasil karena contoh dalam pertanyaannya lemah.auto
di C dan pra-C ++ 11. Hasil edit Anda di luar topik.var
merupakan kata kunci yang dipesan sejak Java 9.Mungkin Java 10 memiliki apa yang Anda (dan saya) inginkan, melalui
var
kata kunci.Dari Proposal Peningkatan JDK 286
Pembaruan: Ya , fitur itu berhasil masuk ke rilis Java 10!
sumber
var
bukan kata kunci! Dari JLS : "var bukan kata kunci, melainkan pengenal dengan arti khusus sebagai jenis deklarasi variabel lokal". Jadi, tidak seperti kata kunci, tidak ada yang menghentikan Anda memanggil variabel atau metode "var".var
memang tidak ada dalam daftar kata kunci.Java 7 memperkenalkan sintaks berlian
Dibandingkan dengan java lama
Pembaca kritis akan melihat bahwa sintaks baru ini tidak membantu menulis loop for di pertanyaan asli. Sepertinya itu benar dan sepenuhnya disengaja. Lihat jawaban lain yang mengutip database bug Oracle.
sumber
auto integerBox = new Box<Integer>();
HashMap<String, LinkedList<Operation, Set<Integer>>>
Di Java 8, Anda bisa menggunakan inferensi tipe lambda untuk menghindari deklarasi tipe. Analog dengan contoh penanya adalah:
keduanya juga dapat disederhanakan menggunakan referensi metode:
sumber
Singkatnya, tidak ada tipe otomatis. Jika semua yang Anda lakukan adalah mencetak nilai, Anda bisa merujuk ke nilai sebagai
Object
.sumber
hashCode
s, atau mengumpulkan nama kelas, atau ... Anda mendapat ide;) Daftarnya pendek, meskipun. Lihat dokumen kelas Objek (komentar untuk pemula, saya yakin Anda mengetahuinya SimonC)Ini bukan solusi Java murni, namun menambahkan pustaka bernama lombok akan memungkinkan keajaiban di bawah ini untuk mengkompilasi dan bekerja sangat mirip dengan
auto
kata kunci di C ++sumber