Lambda, lambda, lambda. Itu saja yang Anda dengar ketika orang membicarakan Java 8. Tapi itu hanya satu bagian. Java 8 memiliki banyak fitur baru - beberapa kelas dan idiom baru yang kuat, dan lainnya hanya hal-hal yang seharusnya sudah ada sejak awal. Saya ingin beralih ke sepuluh fitur baru yang menurut saya merupakan permata kecil yang layak untuk diketahui. Pasti ada setidaknya satu atau dua di antaranya yang ingin Anda coba, jadi mari kita mulai!
1) Metode bawaan. Baru dalam bahasa Java, kini Anda dapat menambahkan badan metode ke antarmuka (
metode default ). Metode ini ditambahkan tanpa syarat ke semua kelas yang mengimplementasikan antarmuka ini. Ini memberi Anda kesempatan untuk menambahkan fungsionalitas baru ke perpustakaan yang ada tanpa merusak kode lama. Itu jelas merupakan nilai tambah. Di sisi lain, hal ini secara serius mengaburkan batas antara antarmuka, yang mewajibkan kondisi tertentu untuk diikuti sebagai konvensi, dan kelas yang mengikutinya, sebagai implementasi pribadinya. Di tangan kanan (kanan), ini bisa menjadi cara elegan untuk membuat antarmuka lebih cerdas, menghindari pengulangan, dan memperluas perpustakaan. Di tangan yang buruk; kita akan segera melihat metode di antarmuka yang memanggil ini dan mengubahnya menjadi tipe konkret. Brrr....
2) Menghentikan proses. Memulai proses tambahan adalah salah satu hal yang Anda lakukan setengah mengetahui bahwa Anda akan kembali (debug) untuk men-debugnya ketika proses (retak) (crash) dibatalkan, (hang) hang, atau menggunakan 100% CPU. Kelas Process kini telah dilengkapi dengan dua metode baru untuk membantu Anda mengendalikan proses yang sulit diatur. Yang pertama,
isAlive() , memungkinkan Anda memeriksa dengan mudah apakah suatu proses sedang berjalan tanpa harus menunggu. (Peringatan!) yang kedua dan lebih kuat adalah
destroyForcively() , yang memungkinkan Anda (tanpa malu-malu) secara paksa (membunuh) menghentikan proses yang telah melampaui waktunya (menunggu atau sebaliknya) atau tidak lagi diperlukan.
3) Kunci Tercap. Sekarang untuk sesuatu yang sangat menarik. Tidak ada yang suka menyinkronkan kode. Ini adalah cara yang pasti untuk memperlambat kinerja aplikasi Anda (terutama dalam skala besar) atau lebih buruk lagi, menyebabkan aplikasi terhenti. Namun, terkadang Anda tidak punya pilihan. Ada banyak idiom untuk menyinkronkan akses multi-utas ke suatu sumber daya. Salah satu yang paling disukai adalah ReadWriteLock dan implementasi terkait. Idiom ini mengurangi pertikaian dengan mengizinkan beberapa thread menggunakan sumber daya sementara hanya memblokir thread yang memanipulasinya. Kedengarannya bagus, tetapi dalam praktiknya kunci ini sangat
lambat , terutama dengan jumlah thread penulisan yang banyak. Hal ini ternyata sangat buruk sehingga Java 8 memperkenalkan RWLock baru yang disebut
StampedLock . Kunci ini tidak hanya lebih cepat, tetapi juga menawarkan API yang kuat untuk penguncian optimis, di mana Anda bisa mendapatkan kunci baca dengan biaya rendah, dengan harapan tidak ada operasi tertulis yang terjadi selama bagian penting kode. Di akhir bagian, Anda menanyakan kunci apakah perekaman terjadi selama waktu tersebut, dalam hal ini Anda dapat memutuskan apakah akan mencoba lagi, meningkatkan penguncian, atau menyerah. Kunci ini adalah alat yang ampuh dan layak mendapat postingan tentang dirinya sendiri. Saya sangat gembira dengan mainan baru ini. Besar! Selain itu Anda dapat membaca
Di Sini .
4) Perekam yang bersaing. Ini adalah permata kecil lainnya bagi siapa pun yang menjalankan aplikasi multi-thread.
API baru yang sederhana dan efisien untuk membaca dan menulis penghitung dari berbagai thread. Terkadang, ini bahkan lebih cepat daripada menggunakan AtomicIntegers. Cukup mengagumkan!
5) Nilai opsional (atau opsional). Oh, petunjuk nol, memusingkan semua pengembang Java. Mungkin pengecualian yang paling populer, ini sudah ada sejak awal. Setidaknya sejak
tahun 1965 . Meminjam dari Scala dan Haskell, Java 8 memiliki pola baru, yang disebut Opsional, untuk membungkus referensi yang bisa berupa null. Ini sama sekali bukan sebuah solusi jitu yang akan menghilangkan null, namun lebih merupakan sarana bagi perancang API untuk menunjukkan pada tingkat kode (bukan dokumentasi) bahwa nilai null dapat dikembalikan atau diteruskan ke metode, dan pemanggil harus bersiaplah untuk itu. Jadi ini hanya akan berfungsi untuk API baru, asalkan pemanggil tidak mengizinkan referensi keluar dari pembungkus, sehingga referensi tersebut dapat didereferensi secara tidak aman. Saya harus mengatakan bahwa saya cukup ambivalen tentang fitur ini. Di satu sisi, null tetap menjadi masalah besar, jadi saya menghargai semua yang telah dilakukan untuk menyelesaikannya. Di sisi lain, saya cukup skeptis bahwa hal ini akan berhasil. Hal ini karena penggunaan Opsional memerlukan upaya berkelanjutan dari seluruh perusahaan dan memiliki dampak langsung yang kecil. Tanpa penegakan hukum yang kuat, kemungkinan besar mereka akan tetap berada di sisi kiri jalan.
Baca lebih lanjut tentang Opsional .
6) Beri anotasi pada semuanya. Kemajuan kecil lainnya dalam bahasa Java: anotasi dapat ditambahkan
ke hampir semua hal di kode Anda. Sebelumnya, anotasi hanya dapat ditambahkan ke hal-hal seperti deklarasi kelas atau metode. Sejak Java 8, anotasi dapat ditambahkan ke deklarasi variabel dan parameter, saat memberikan nilai ke tipe tertentu, atau bahkan mengalokasikan objek baru. Ini adalah bagian dari upaya terkonsentrasi (bersama dengan peningkatan pada alat dan API JavaDoc) untuk menjadikan bahasa ini lebih ramah terhadap alat analisis dan pengukuran statis (seperti FindBugs). Ini adalah fitur yang bagus, tapi seperti
invokeDynamic yang diperkenalkan di Java 7, nilai sebenarnya akan bergantung pada apa yang dilakukan masyarakat terhadapnya.
7) Operasi luapan. Sekarang, berikut adalah
serangkaian metode, yang seharusnya menjadi bagian dari perpustakaan inti sejak hari pertama. Hobi favorit saya adalah men-debug luapan numerik ketika int melebihi 2^32, dan melanjutkan untuk membuat kesalahan yang paling buruk dan tidak terduga (yaitu "bagaimana saya bisa mendapatkan nilai aneh ini?"). Sekali lagi, tidak ada solusi jitu di sini, tetapi ada banyak fungsi untuk memanipulasi angka yang keluar saat meluap dengan cara yang tidak terlalu mudah dibandingkan dengan operator +/* standar Anda, yang meluap tanpa syarat.
8) Telusuri katalog. Mengulangi isi pohon direktori telah lama menjadi salah satu hal yang dicari orang di Google (dalam hal ini Anda mungkin akan disarankan untuk menggunakan Apache.FileUtils). Java 8 memberikan facelift pada kelas
Files dengan sepuluh metode baru. Favorit saya adalah
walk() , yang membuat thread malas (penting untuk sistem file besar) untuk melakukan iterasi melalui konten struktur direktori.
9) Generasi acak yang kuat. Saat ini tidak ada kekurangan pembicaraan tentang kerentanan kata sandi dan kunci. Keamanan perangkat lunak adalah bisnis yang kompleks dan rentan terhadap kesalahan. Itu sebabnya saya menyukai metode SecureRandom yang baru.
getinstanceStrong() , yang secara otomatis memilih generator acak terkuat yang tersedia untuk Java Virtual Machine. Hal ini mengurangi kemungkinan Anda gagal atau memiliki generator yang lemah, yang akan membuat kunci dan nilai terenkripsi lebih rentan terhadap peretasan.
10. Tanggal.toInstant(). Java 8 memperkenalkan
API yang benar-benar baru untuk tanggal dan waktu . Hal ini cukup dimaklumi karena yang ada saat ini kurang bagus. Joda pada dasarnya telah menggunakan Java API untuk tanggal dan waktu selama beberapa tahun. Namun, bahkan dengan API baru, satu masalah besar masih tetap ada - ada banyak sekali kode dan pustaka yang menggunakan API lama. Dan kita semua tahu bahwa mereka akan tetap di sini. Jadi apa yang akan kamu lakukan? Untuk mencapai hal ini, Java 8 melakukan sesuatu yang cukup elegan dengan menambahkan metode baru ke kelas Date yang disebut
toInstant() yang mengubahnya menjadi API baru. Hal ini memungkinkan Anda untuk melakukan lompatan cepat ke API baru, bahkan ketika bekerja dengan kode yang menggunakan API tanggal lama (dan akan terus melakukannya di masa mendatang).
Vash_the_Stampede
Level 11
GO TO FULL VERSION