Bagaimana cara menggunakan parameter opsional di Java? Spesifikasi apa yang mendukung parameter opsional?
java
optional-parameters
Mike Pone
sumber
sumber
Ada beberapa cara untuk mensimulasikan parameter opsional di Jawa:
Metode kelebihan beban.
Salah satu batasan dari pendekatan ini adalah bahwa itu tidak berfungsi jika Anda memiliki dua parameter opsional dari jenis yang sama dan salah satu dari mereka dapat dihilangkan.
Varargs.
a) Semua parameter opsional memiliki tipe yang sama:
b) Jenis parameter opsional mungkin berbeda:
Kelemahan utama dari pendekatan ini adalah bahwa jika parameter opsional dari tipe yang berbeda Anda kehilangan pemeriksaan tipe statis. Lebih jauh, jika setiap parameter memiliki arti yang berbeda, Anda perlu cara untuk membedakannya.
Nulls. Untuk mengatasi keterbatasan pendekatan sebelumnya, Anda dapat mengizinkan nilai nol dan kemudian menganalisis setiap parameter dalam tubuh metode:
Sekarang semua nilai argumen harus disediakan, tetapi yang standar mungkin nol.
Kelas opsional. Pendekatan ini mirip dengan nol, tetapi menggunakan kelas Java 8 Opsional untuk parameter yang memiliki nilai default:
Opsional membuat metode kontrak eksplisit untuk penelepon, namun, orang mungkin menemukan tanda tangan seperti itu terlalu lisan.
Pembaruan: Java 8 termasuk kelas
java.util.Optional
out-of-the-box, jadi tidak perlu menggunakan jambu untuk alasan khusus ini di Jawa 8. Namun nama metode agak berbeda.Pola pembangun. Pola pembangun digunakan untuk konstruktor dan diimplementasikan dengan memperkenalkan kelas Builder yang terpisah:
Peta. Ketika jumlah parameter terlalu besar dan untuk sebagian besar nilai default biasanya digunakan, Anda bisa meneruskan argumen metode sebagai peta nama / nilai mereka:
Di Jawa 9, pendekatan ini menjadi lebih mudah:
Harap dicatat bahwa Anda dapat menggabungkan salah satu dari pendekatan ini untuk mencapai hasil yang diinginkan.
sumber
a
variabel Anda adalah String (pemeran adalah benar).Optional
parameter sebagai di salah satu opsi, jawaban ini sangat bagus.Ada parameter opsional dengan Java 5.0. Nyatakan fungsi Anda seperti ini:
Anda bisa menelepon dengan
doSomething();
ataudoSomething(true);
sekarang.sumber
doSomething() { doSomething(true); }
tidak ada array untuk ditangani, tidak ada ambiguitasAnda dapat menggunakan sesuatu seperti ini:
Itu
params
variabel adalah opsional. Itu diperlakukan sebagai array Objek nullable.Anehnya, saya tidak dapat menemukan apa pun dalam dokumentasi ini, tetapi berhasil!
Ini "baru" di Java 1.5 dan yang lebih tinggi (tidak didukung di Java 1.4 atau sebelumnya).
Saya melihat pengguna bhoot menyebutkan ini juga di bawah.
sumber
Sayangnya Java tidak mendukung parameter default secara langsung.
Namun, saya telah menulis satu set anotasi JavaBean, dan salah satunya mendukung parameter default seperti berikut:
Prosesor anotasi menghasilkan kelebihan metode untuk mendukung hal ini dengan benar.
Lihat http://code.google.com/p/javadude/wiki/Annotations
Contoh lengkap di http://code.google.com/p/javadude/wiki/AnnotationsDefaultParametersExample
sumber
Tidak ada parameter opsional di Jawa. Apa yang dapat Anda lakukan adalah kelebihan fungsi dan kemudian melewati nilai default.
sumber
VarArgs dan overloading telah disebutkan. Pilihan lain adalah pola Builder, yang akan terlihat seperti ini:
Meskipun pola itu akan paling tepat ketika Anda membutuhkan parameter opsional di konstruktor.
sumber
Dalam JDK> 1,5 Anda dapat menggunakannya seperti ini;
sumber
Anda dapat melakukan hal menggunakan metode kelebihan seperti ini.
Anda juga dapat menggunakan anotasi @Nullable
cukup berikan null sebagai parameter pertama.
Jika Anda melewati variabel tipe yang sama Anda dapat menggunakan ini
sumber
Versi pendek :
Menggunakan tiga titik :
(berdasarkan jawaban @ VitaliiFedorenko)
sumber
Overloading baik-baik saja, tetapi jika ada banyak variabel yang membutuhkan nilai default, Anda akan berakhir dengan:
Jadi saya akan menyarankan gunakan Argumen Variabel yang disediakan oleh Java. Berikut tautan untuk penjelasan.
sumber
Anda bisa menggunakan kelas yang berfungsi seperti pembangun untuk memuat nilai opsional Anda seperti ini.
Gunakan seperti
Output adalah
Untuk melewati semua nilai opsional yang Anda harus suka
foo(o -> {});
atau jika Anda suka, Anda dapat membuat yang keduafoo()
metode yang tidak mengambil parameter opsional.Dengan menggunakan pendekatan ini, Anda dapat menentukan nilai opsional dalam urutan apa pun tanpa ambiguitas. Anda juga dapat memiliki parameter kelas yang berbeda tidak seperti dengan varargs. Pendekatan ini akan lebih baik jika Anda dapat menggunakan anotasi dan pembuatan kode untuk membuat kelas Opsi.
sumber
Java sekarang mendukung opsi dalam 1.8, saya terjebak dengan pemrograman di android jadi saya menggunakan nulls sampai saya bisa memperbaiki kode untuk menggunakan tipe opsional.
sumber
Argumen default tidak dapat digunakan di Jawa. Di mana dalam C #, C ++ dan Python, kita bisa menggunakannya ..
Di Java, kita harus menggunakan 2 metode (fungsi) alih-alih satu dengan parameter default.
Contoh:
http://parvindersingh.webs.com/apps/forums/topics/show/8856498-java-how-to-set-default-parameters-values-like-c-
sumber
Ini adalah pertanyaan lama mungkin bahkan sebelum tipe Opsional yang sebenarnya diperkenalkan tetapi hari ini Anda dapat mempertimbangkan beberapa hal: - menggunakan metode overloading - menggunakan tipe Opsional yang memiliki keuntungan menghindari lewat NULL di sekitar tipe Opsional diperkenalkan di Jawa 8 sebelum biasanya digunakan dari lib pihak ketiga seperti Google's Guava. Menggunakan opsional sebagai parameter / argumen dapat dianggap sebagai penggunaan berlebihan karena tujuan utamanya adalah menggunakannya sebagai waktu pengembalian.
Ref: https://itcodehub.blogspot.com/2019/06/using-optional-type-in-java.html
sumber
Kita dapat membuat parameter opsional dengan Metode overloading atau Menggunakan DataType ...
| * | Metode kelebihan beban:
Cara termudah adalah
| * | DataType ... bisa menjadi parameter opsional
sumber
RetDtaTyp
... serius? ApakahRetDataType
terlalu sulit untuk mengetik?Jika Anda berencana untuk menggunakan antarmuka dengan beberapa parameter , seseorang dapat menggunakan pola struktural berikut dan menerapkan atau mengganti berlaku - metode yang didasarkan pada kebutuhan Anda .
sumber
Jika titik akhir API, cara yang elegan adalah dengan menggunakan anotasi "Spring":
Perhatikan dalam hal ini bahwa innerFunc akan memerlukan variabel, dan karena itu bukan titik akhir api, tidak dapat menggunakan anotasi Spring ini untuk menjadikannya opsional. Referensi: https://www.baeldung.com/spring-request-param
sumber