JavaRush /Blog Java /Random-MS /10 ciri Java 8 yang anda tidak pernah dengar.

10 ciri Java 8 yang anda tidak pernah dengar.

Diterbitkan dalam kumpulan
Lambdas, lambdas, lambdas. Itu sahaja yang anda dengar apabila orang bercakap tentang Java 8. Tetapi itu hanya satu bahagian. Java 8 mempunyai banyak ciri baharu - beberapa kelas dan simpulan bahasa baharu yang berkuasa, dan yang lain hanyalah perkara yang sepatutnya ada sejak awal. Saya ingin beralih kepada sepuluh ciri baharu yang saya lihat sebagai permata kecil yang pasti bernilai diketahui. Pasti ada sekurang-kurangnya satu atau dua di antara mereka yang anda ingin cuba, jadi mari mulakan! 1) Kaedah lalai. Baru dalam bahasa Java, anda kini boleh menambah badan kaedah pada antara muka ( kaedah lalai ). Kaedah ini ditambah tanpa syarat kepada semua kelas yang melaksanakan antara muka ini. Ini memberi anda peluang untuk menambah fungsi baharu pada perpustakaan sedia ada tanpa melanggar kod lama. Itu pasti satu kelebihan. Sebaliknya, ia secara serius mengaburkan garis antara antara muka, yang mewajibkan syarat tertentu untuk dipatuhi sebagai konvensyen, dan kelas yang mengikutinya, sebagai pelaksanaan peribadinya. Di tangan kanan (kanan), ini boleh menjadi cara yang elegan untuk menjadikan antara muka lebih pintar, mengelakkan pengulangan dan memanjangkan perpustakaan. Di tangan yang buruk; tidak lama lagi kita akan melihat kaedah dalam antara muka yang memanggil ini dan menghantarnya kepada jenis konkrit. Brrr.... 2) Menghentikan proses. Memulakan proses tambahan ialah salah satu perkara yang anda lakukan separuh mengetahui bahawa anda akan kembali (debug) untuk menyahpepijatnya apabila proses (retak) (crash) dibatalkan, (hang) hang atau menggunakan 100% CPU. Kelas Proses kini telah dipersenjatai dengan dua kaedah baharu untuk membantu anda mengawal proses yang tidak dikawal. Yang pertama, isAlive() , membolehkan anda menyemak dengan mudah sama ada proses sedang berjalan tanpa perlu menunggunya. Yang kedua dan lebih berkuasa (amaran!) ialah destroyForcibly() , yang membolehkan anda (tanpa malu) secara paksa (membunuh) menghentikan proses yang telah melebihi masanya (menunggu atau sebaliknya) atau tidak lagi diperlukan. 3) StampedLock. Sekarang untuk sesuatu yang sangat menarik. Tiada siapa yang suka menyegerakkan kod. Ini adalah cara yang pasti untuk memperlahankan prestasi aplikasi anda (terutamanya dalam skala besar) atau lebih teruk lagi, menyebabkannya membeku. Namun, kadangkala anda tidak mempunyai pilihan. Terdapat banyak simpulan bahasa untuk menyegerakkan akses berbilang benang kepada sumber. Salah satu yang paling disukai ialah ReadWriteLock dan pelaksanaan yang berkaitan. Simpulan bahasa ini mengurangkan perbalahan dengan membenarkan berbilang benang menggunakan sumber sambil menyekat hanya benang yang memanipulasinya. Bunyinya bagus, tetapi dalam praktiknya kunci ini sangat perlahan , terutamanya dengan sejumlah besar benang penulisan. Ini ternyata sangat teruk sehingga Java 8 memperkenalkan RWLock baharu yang dipanggil StampedLock . Kunci ini bukan sahaja lebih pantas, tetapi juga menawarkan API yang berkuasa untuk penguncian optimistik, di mana anda boleh mendapatkan kunci baca pada kos yang rendah, dengan harapan tiada operasi bertulis berlaku semasa bahagian kritikal kod. Pada penghujung bahagian, anda bertanya kepada kunci sama ada rakaman berlaku pada masa itu, dalam hal ini anda boleh memutuskan sama ada untuk mencuba lagi, meningkatkan kunci atau menyerah. Kunci ini adalah alat yang berkuasa dan patut disiarkan tentang dirinya sendiri. Saya sangat teruja dengan mainan baru ini. Hebat! Selain itu anda boleh membaca Di sini . 4) Perakam bertanding. Ini adalah satu lagi permata kecil untuk sesiapa sahaja yang menjalankan aplikasi berbilang benang. API baharu yang mudah dan cekap untuk membaca dan menulis kaunter daripada berbilang rangkaian. Kadangkala, ia lebih pantas daripada menggunakan AtomicIntegers. Agak hebat! 5) Nilai pilihan (atau pilihan). Oh, petunjuk nol, sakit kepala untuk semua pembangun Java. Mungkin yang paling popular daripada semua pengecualian, ia telah wujud sejak zaman awal lagi. Sekurang-kurangnya sejak 1965 . Meminjam daripada Scala dan Haskell, Java 8 mempunyai corak baharu, dipanggil Pilihan, untuk membungkus rujukan yang boleh menjadi batal. Ini sama sekali bukan peluru perak yang akan menghapuskan null, tetapi cara untuk pereka API menunjukkan pada tahap kod (bukan dokumentasi) bahawa nilai nol boleh dikembalikan atau dihantar ke kaedah, dan pemanggil mesti bersedia untuk itu. Jadi ini hanya akan berfungsi untuk API baharu, dengan syarat pemanggil tidak membenarkan rujukan terlepas daripada pembungkus, di mana ia boleh dinyahrujuk secara tidak selamat. Saya perlu mengatakan bahawa saya agak ambivalen tentang ciri ini. Di satu pihak, nulls kekal sebagai masalah besar, jadi saya menghargai segala yang telah dilakukan untuk menyelesaikannya. Sebaliknya, saya agak skeptikal bahawa ini akan berjaya. Ini kerana menggunakan Pilihan memerlukan usaha berterusan daripada seluruh syarikat dan mempunyai sedikit kesan segera. Tanpa penguatkuasaan yang kuat, kemungkinan ia akan kekal di sebelah kiri jalan. Baca lebih lanjut mengenai Pilihan . 6) Catatkan segala-galanya. Satu lagi kemajuan kecil dalam bahasa Java: anotasi boleh ditambah kepada hampir semua perkara dalam kod anda. Sebelum ini, anotasi hanya boleh ditambahkan pada perkara seperti kelas atau pengisytiharan kaedah. Sejak Java 8, anotasi boleh ditambah pada pengisytiharan pembolehubah dan parameter, apabila menghantar nilai kepada jenis tertentu, atau bahkan memperuntukkan objek baharu. Ini adalah sebahagian daripada usaha tertumpu (bersama-sama dengan penambahbaikan pada alat JavaDoc dan API) untuk menjadikan bahasa lebih mesra kepada analisis statik dan alat pengukuran (seperti FindBugs). Ini adalah ciri yang bagus, tetapi sama seperti invokeDynamic yang diperkenalkan dalam Java 7, nilai sebenarnya akan bergantung pada apa yang masyarakat lakukan dengannya. 7) Operasi limpahan. Sekarang, berikut adalah satu set kaedah, yang sepatutnya menjadi sebahagian daripada perpustakaan teras dari hari pertama. Hobi kegemaran saya ialah menyahpepijat limpahan berangka apabila int melebihi 2^32, dan meneruskan untuk mencipta ralat yang paling jahat dan paling tidak dijangka (iaitu "bagaimana saya mendapat nilai pelik ini?"). Sekali lagi, tiada peluru perak di sini, tetapi terdapat banyak fungsi untuk memanipulasi nombor yang dibuang apabila ia melimpah dengan cara yang kurang memaafkan daripada operator +/* standard anda, yang melimpah tanpa syarat. 8) Berjalan melalui katalog. Lelaran melalui kandungan pepohon direktori telah lama menjadi salah satu perkara yang orang Google - cari (dalam hal ini anda mungkin akan dinasihatkan untuk menggunakan Apache.FileUtils). Java 8 memberikan kelas Fail peningkatan semula dengan sepuluh kaedah baharu. Kegemaran saya ialah walk() , yang mencipta benang malas (penting untuk sistem fail yang besar) untuk beralih melalui kandungan struktur direktori. 9) Generasi rawak yang kuat. Tiada kekurangan pada masa kini tentang kelemahan kata laluan dan kunci. Keselamatan perisian adalah perniagaan yang kompleks dan terdedah kepada ralat. Itulah sebabnya saya suka kaedah SecureRandom baharu. getinstanceStrong() , yang secara automatik memilih penjana rawak terkuat yang tersedia untuk Mesin Maya Java. Ini mengurangkan kemungkinan anda akan gagal atau mempunyai penjana yang lemah, yang akan menjadikan kunci dan nilai yang disulitkan lebih terdedah kepada penggodaman. 10. Date.toInstant(). Java 8 memperkenalkan API baharu sepenuhnya untuk tarikh dan masa . Ini cukup difahami kerana yang sedia ada tidak begitu baik. Joda pada dasarnya telah menuju ke API Java untuk tarikh dan masa selama beberapa tahun. Walau bagaimanapun, walaupun dengan API baharu, satu masalah besar kekal - terdapat satu tan kod dan perpustakaan menggunakan API lama. Dan kita semua tahu bahawa mereka berada di sini untuk tinggal. Jadi apa yang anda akan lakukan? Untuk mencapai matlamat ini, Java 8 melakukan sesuatu yang agak elegan dengan menambahkan kaedah baharu pada kelas Date yang dipanggil toInstant() yang menukarkannya kepada API baharu. Ini membolehkan anda membuat lompatan pantas ke API baharu, walaupun semasa bekerja dengan kod yang menggunakan API tarikh lama (dan akan terus berbuat demikian untuk masa hadapan yang boleh dijangka).
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION