Kata pengantar
Tidak ada keraguan bahwa Java 8 adalah versi terpenting dari Java sejak Java 5 (dirilis pada tahun 2004). Versi ini berisi lebih dari selusin fitur baru dalam bahasa, kompiler, perpustakaan, alat, dan JVM.
Java 8 adalah versi utama Java. Beberapa orang percaya bahwa meskipun fitur -fitur baru ini diharapkan oleh pengembang Java, itu juga membutuhkan banyak upaya untuk belajar. Di bawah artikel ini akan memperkenalkan kepada Anda detail fitur baru opsional, metode default dan metode statis di Java 8. Tanpa basa -basi lebih lanjut, mari kita lihat pengantar rinci.
Opsional
Kelas opsional ( java.util.Optional ) adalah kelas kontainer yang mewakili apakah nilai ada atau tidak ada. Dulu menggunakan null untuk menunjukkan bahwa nilai tidak ada. Sekarang opsional dapat mengekspresikan konsep ini dengan lebih baik. Dan itu bisa menghindari pengecualian pointer nol.
Metode Umum:
Optional.of(T t) : Membuat instance opsional.Optional.empty() : Membuat instance opsional kosong.Optional.ofNullable(T t) Jika t tidak nol, buat instance opsional, jika tidak buat instance kosong.isPresent() : Menentukan apakah nilainya disertakan.orElse(T t) : Mengembalikan nilai jika objek panggilan berisi nilai, jika tidak mengembalikan t.orElseGet(Supplier s) : Mengembalikan nilai jika objek panggilan berisi nilai, jika tidak mengembalikan nilai yang diperoleh oleh s.map(Function f) Jika ada nilai untuk memprosesnya dan mengembalikan opsional yang diproses, jika tidak ia mengembalikan Optional.empty()flatMap(Function mapper) mirip dengan MAP, mensyaratkan bahwa nilai pengembalian harus opsional.Berikut ini adalah paragraf dari ImportNew untuk memberi tahu kami cara menggunakan opsional dengan benar. Misalnya, jangan menulisnya seperti ini:
string statis publik getName (pengguna u) {opsional <user> user = opsional.ofnullable (u); if (! User.ispresent ()) mengembalikan "tidak diketahui"; return user.get (). name;}Penulisan ulang ini tidak hanya ringkas, tetapi juga operasinya sama dengan potongan kode pertama. Tidak lebih dari menggunakan metode isPresent untuk menggantikan u == null. Penulisan ulang seperti itu bukan penggunaan opsional yang benar, mari kita tulis ulang lagi.
public static string getName (user u) {return opsional.ofnullable (u) .map (user-> user.name) .orelse ("tidak diketahui");}Ini adalah cara yang benar untuk menggunakan opsional. Kemudian menurut ide ini, kita dapat membuat panggilan rantai dengan ketenangan pikiran alih -alih membuat penilaian berlapis -lapis. Lihatlah sepotong kode:
string statis publik getchampionname (kompetisi comp) melempar illegalArgumentException {if (comp! = null) {compresult hasil = comp.getResult (); if (result! = null) {user champion = result.getchampion (); if (champion! = null) {return champion.getName (); }}} lempar IllegalArgumentException baru ("Nilai param comp tidak tersedia.");} Karena berbagai alasan (seperti: kompetisi belum menghasilkan kejuaraan, panggilan abnormal ke metode ini, paket hadiah besar yang terkubur dalam implementasi metode tertentu, dll.), Kita tidak dapat dengan senang hati pergi jauh -jauh comp.getResult().getChampion().getName() . Bahasa lain seperti Kotlin memberikan berkah operator di level sintaks: comp?.getResult()?.getChampion()?.getName() Jadi apa yang harus kita lakukan di java?
Mari kita lihat seperti apa kode -kode ini setelah dukungan opsional.
string statis publik getchampionname (kompetisi comp) melempar illegalargumentException {return opsional.ofnullable (comp) .map (c-> c.getResult ()) .map (r-> r.getchampion (). "ParamEccept () .getname (). Besar () (); none (u-> u-getname ()) .Orelsethrow (() () -tan.Ini sangat nyaman. Pesona opsional lebih dari itu. Opsional juga memiliki beberapa kegunaan magis, seperti opsional yang dapat digunakan untuk menguji legalitas parameter.
public void setName (nama string) melempar ilegalargumentException {this.name = opsional.ofnullable (name) .filter (user :: isNamevalid) .orelsethrow (()-> new ilegalargumentException ("nama pengguna tidak valid."));}Kode di atas Referensi ImportNew - Java8 Cara menggunakan opsional dengan benar.
Metode default dan statis dalam antarmuka
Metode statis dapat ditambahkan ke antarmuka Java8, atau metode default dapat ditambahkan, dan metode default dimodifikasi dengan default.
Antarmuka Public Fun <T> {default void getName () {System.out.println ("Hello World"); } static void getage () {System.out.println ("sembilan"); }}Jika antarmuka mendefinisikan metode default, kelas induk dari kelas implementasinya mendefinisikan metode dengan nama dan daftar parameter yang sama. Kemudian ketika kelas implementasi dipanggil, metode di kelas induk dieksekusi.
testf kelas publik {public void getName () {System.out.println ("testf"); }} antarmuka publik testInterface {default void getName () {System.out.println ("Hello World"); }} tes kelas publik memperluas testf mengimplementasikan testInterface {public static void main (string [] args) {test t = new test (); t.getName (); // outputnya adalah testf}}Jika kelas implementasi mengimplementasikan dua antarmuka, jika satu antarmuka induk menyediakan metode default dan antarmuka induk lainnya juga menyediakan metode dengan nama dan daftar parameter yang sama (terlepas dari apakah metode tersebut adalah metode default), metode tersebut harus diganti untuk menyelesaikan konflik, jika tidak kesalahan akan dilaporkan.
TestInterface Antarmuka Publik {default void getName () {System.err.println ("Hello World"); }} antarmuka public testInterface1 {void getName ();} public class test1 mengimplementasikan testInterface, testInterface1 {public void getName () {System.out.println ("tes1f"); }}Meringkaskan
Di atas adalah seluruh konten artikel ini. Saya berharap konten artikel ini memiliki nilai referensi tertentu untuk studi atau pekerjaan semua orang. Jika Anda memiliki pertanyaan, Anda dapat meninggalkan pesan untuk berkomunikasi. Terima kasih atas dukungan Anda ke wulin.com.