Sesuatu seperti berikut ini:
contoh ref:
void changeString(ref String str) {
str = "def";
}
void main() {
String abc = "abc";
changeString(ref abc);
System.out.println(abc); //prints "def"
}
keluar contoh:
void changeString(out String str) {
str = "def";
}
void main() {
String abc;
changeString(out abc);
System.out.println(abc); //prints "def"
}
ref
atauout
di C # adalah ketika saya menggunakan pola sepertiTryParse()
, di mana metode mengembalikan hasil boolean, dan satu-satunya cara untuk mendapatkan nilai parsing darinya adalah dengan menggunakanref
atauout
.Jawaban:
Tidak, Java tidak memiliki sesuatu seperti C #
ref
danout
kata kunci untuk lewat referensi.Anda hanya dapat memberikan nilai di Java. Bahkan referensi dilewatkan oleh nilai. Lihat halaman Jon Skeet tentang penerusan parameter di Java untuk lebih jelasnya.
Untuk melakukan sesuatu yang serupa
ref
atauout
Anda harus membungkus parameter Anda di dalam objek lain dan meneruskan referensi objek itu sebagai parameter.sumber
ref
.Reference parameters need the ref modifier as part of both the declaration and the invocation - that means it's always clear when you're passing something by reference.
yoda.arachsys.com/csharp/parameters.htmlT&
) berdasarkan nilai, ya. Tetapi C # memiliki terminologi sendiri, dan secara khusus tidak menyertakan hal-hal seperti nilai-nilai tiperef T
- dari perspektif C #,ref
secara ketat adalah pengubah parameter, dan berbicara tentang "meneruskan referensi berdasarkan nilai" sehubungan dengan itu tidak masuk akal .Jawaban langsung: Tidak
Tapi Anda bisa mensimulasikan referensi dengan pembungkus .
Dan lakukan hal berikut:
Di luar
Dan pada dasarnya semua jenis lainnya seperti:
sumber
Sebenarnya tidak ada ref atau out kata kunci yang setara dalam bahasa Jawa sejauh yang saya tahu. Namun saya baru saja mengubah sebuah C # kode ke Java yang menggunakan keluar parameter dan akan memberitahu apa yang baru saja dilakukan. Anda harus membungkus objek apa pun ke dalam kelas pembungkus dan meneruskan nilai yang dibungkus dalam contoh objek pembungkus sebagai berikut;
Contoh Sederhana Untuk Menggunakan Wrapper
Ini adalah Kelas Wrapper ;
Dan inilah kode tesnya;
Contoh Dunia Nyata
Metode AC # .NET menggunakan parameter keluar
Berikut ada C # .NET metode yang menggunakan keluar kata kunci;
Setara Java dari kode C # yang menggunakan parameter keluar
Dan persamaan Java untuk metode ini dengan bantuan kelas pembungkus adalah sebagai berikut;
Kelas Pembungkus
Dan kelas pembungkus yang digunakan dalam kode Java ini adalah sebagai berikut;
sumber
Java meneruskan parameter berdasarkan nilai dan tidak memiliki mekanisme apa pun untuk mengizinkan referensi lewat. Itu berarti bahwa setiap kali parameter dilewatkan, nilainya disalin ke frame stack yang menangani panggilan.
Istilah nilai yang saya gunakan di sini membutuhkan sedikit klarifikasi. Di Jawa kami memiliki dua jenis variabel - primitif dan objek. Nilai primitif adalah primitif itu sendiri, dan nilai suatu objek adalah referensinya (dan bukan status objek yang direferensikan). Oleh karena itu, setiap perubahan pada nilai di dalam metode hanya akan mengubah salinan nilai dalam tumpukan, dan tidak akan terlihat oleh pemanggil. Misalnya, tidak ada cara untuk mengimplementasikan metode swap nyata, yang menerima dua referensi dan menukar mereka (bukan isinya!).
sumber
Seperti banyak orang lainnya, saya perlu mengonversi proyek C # ke Java. Saya tidak menemukan solusi lengkap di web mengenai pengubah referensi dan keluar . Tetapi, saya dapat mengambil informasi yang saya temukan, dan mengembangkannya untuk membuat kelas saya sendiri untuk memenuhi persyaratan. Saya ingin membuat perbedaan antara parameter ref dan out untuk kejelasan kode. Dengan kelas di bawah ini, itu mungkin. Semoga informasi ini menghemat waktu dan tenaga orang lain.
Contoh disertakan dalam kode di bawah ini.
sumber
Tiga solusi tidak secara resmi disebutkan secara eksplisit:
Untuk Pair, saya akan merekomendasikan: https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/tuple/Pair.html
sumber
java tidak memiliki cara standar untuk melakukannya. Kebanyakan swap akan dilakukan pada daftar yang dikemas di kelas. tetapi ada cara tidak resmi untuk melakukannya:
sumber