Saya berpikir jika ada cara yang lebih baik / lebih baik untuk meniadakan instanceof
di Jawa. Sebenarnya, saya melakukan sesuatu seperti:
if(!(str instanceof String)) { /* do Something */ }
Tetapi saya berpikir bahwa sintaksis "indah" untuk melakukan ini harus ada.
Adakah yang tahu kalau itu ada, dan seperti apa sintaksisnya?
EDIT: Dengan cantik, saya mungkin mengatakan sesuatu seperti ini:
if(str !instanceof String) { /* do Something */ } // compilation fails
instanceof
begitu banyak ...boolean strIsString = str instanceof String;
...Jawaban:
Tidak, tidak ada cara yang lebih baik; milikmu kanonik.
sumber
Saya tidak tahu apa yang Anda bayangkan ketika Anda mengatakan "cantik", tetapi bagaimana dengan ini? Saya pribadi berpikir itu lebih buruk daripada bentuk klasik yang Anda poskan, tetapi seseorang mungkin menyukainya ...
sumber
!= true
bukan== false
: Dif(!(str instanceof String))
adalah satu-satunya cara yang benar, dan saya harus berhenti memikirkan alternatifAnda dapat menggunakan
Class.isInstance
metode ini:... tapi itu masih dinegasikan dan sangat jelek.
sumber
this method returns true if the specified Object argument is an instance of the represented class (or of any of its subclasses)
Biasanya Anda tidak hanya menginginkan klausa
if
tetapielse
juga.dapat ditulis sebagai
Atau Anda dapat menulis kode sehingga Anda tidak perlu tahu apakah ini String atau bukan. misalnya
dapat ditulis sebagai
sumber
Jika Anda dapat menggunakan impor statis, dan kode moral Anda mengizinkannya
Lalu...
Ini hanya latihan antarmuka yang lancar, saya tidak akan pernah menggunakannya dalam kode kehidupan nyata!
Gunakan cara klasik Anda, itu tidak akan membingungkan orang lain membaca kode Anda!
sumber
Jika Anda merasa lebih dapat dimengerti, Anda dapat melakukan sesuatu seperti ini dengan Java 8:
sumber
if (Predicate.not(isInstanceOfTheClass).test(myObject)) { ...
. Tidak lebih baik, imo, tetapi harus bekerja!ok hanya dua sen saya, gunakan metode string is:
sumber
Anda dapat mencapai dengan melakukan di bawah cara .. tambahkan saja kondisi dengan menambahkan braket
if(!(condition with instanceOf))
dengan seluruh kondisi dengan menambahkan!
operator di awal seperti cara yang disebutkan dalam cuplikan kode di bawah ini.dari pada
sumber
Saya setuju bahwa dalam kebanyakan kasus itu
if (!(x instanceof Y)) {...}
adalah pendekatan terbaik, tetapi dalam beberapa kasus membuatisY(x)
fungsi sehingga Anda bisaif (!isY(x)) {...}
bermanfaat.Saya seorang pemula naskah, dan saya telah bertemu dengan pertanyaan S / O ini beberapa kali selama beberapa minggu terakhir, jadi bagi para googler cara mengetik naskah untuk melakukan ini adalah dengan membuat tipuan seperti ini:
typeGuards.ts
pemakaian
Saya kira satu-satunya alasan mengapa ini mungkin sesuai dalam naskah dan bukan js biasa adalah bahwa typeguard adalah konvensi umum, jadi jika Anda menulisnya untuk antarmuka lain, masuk akal / dapat dimengerti / alami untuk menulisnya untuk kelas juga.
Ada lebih banyak detail tentang penjaga tipe yang ditentukan pengguna seperti ini di dokumen
sumber