Java 10 - Fitur Baru
Hai, para pengembang Java yang sedang mencari tantangan! Saya sangat gembira untuk memandu Anda melalui fitur baru yang menarik yang diperkenalkan di Java 10. Sebagai seseorang yang telah mengajarkan Java selama bertahun-tahun, saya dapat menjamin Anda bahwa pembaruan ini akan membuat perjalanan pengodingan Anda menjadi lebih menyenangkan dan efisien. Mari kita masuk ke dalamnya!
Pengenalan ke Java 10
Java 10 dirilis pada Maret 2018, membawa banyak peningkatan ke bahasa ini. Meskipun mungkin tidak sebesar pergantian versi lain, itu memperkenalkan beberapa fitur yang bagus yang dapat meningkatkan pengalaman pengodingan Anda.
Inferensi Tipe Variabel Lokal
Salah satu fitur yang banyak diskusikan di Java 10 adalah inferensi tipe variabel lokal. Fitur ini memungkinkan Anda mendeklarasikan variabel lokal tanpa secara eksplisit menyatakan tipe mereka. Sebagai ganti, Anda dapat menggunakan kata kunci var
, dan compiler akan menafsirkan tipe berdasarkan inisialisator.
Mari kita lihat contoh:
// Sebelum Java 10
String message = "Hello, Java 10!";
// Dengan Java 10
var message = "Hello, Java 10!";
Dalam contoh ini, compiler secara otomatis menafsirkan bahwa message
adalah String
. Fitur ini dapat membuat kode Anda lebih ringkas dan mudah dibaca, terutama saat berurusan dengan tipe yang kompleks.
Kapan Menggunakan var
Meskipun var
adalah fitur yang kuat, penting untuk menggunakannya dengan bijak. Berikut adalah beberapa panduan:
- Gunakan
var
saat tipe jelas dari sisi kanan pengisian. - Hindari menggunakan
var
saat tipe tidak jelas, karena itu dapat mengurangi keterbacaan kode.
Mari kita lihat contoh yang lebih kompleks:
// Sebelum Java 10
Map<String, List<String>> userFruits = new HashMap<>();
// Dengan Java 10
var userFruits = new HashMap<String, List<String>>();
Dalam kasus ini, penggunaan var
membuat kode lebih bersih tanpa mengorbankan keterbacaan.
Peningkatan API
Java 10 juga memperkenalkan beberapa peningkatan ke API yang sudah ada. Mari kita jelajahi beberapa di antaranya.
Optional.orElseThrow()
Kelas Optional
, yang diperkenalkan di Java 8, mendapat metode baru di Java 10: orElseThrow()
. Metode ini mirip dengan get()
, tapi lebih eksplisit tentang melempar eksepsi jika Optional
kosong.
public class OptionalExample {
public static void main(String[] args) {
Optional<String> emptyOptional = Optional.empty();
try {
String result = emptyOptional.orElseThrow();
} catch (NoSuchElementException e) {
System.out.println("Optional kosong!");
}
}
}
Dalam contoh ini, orElseThrow()
melempar NoSuchElementException
karena Optional
kosong. Metode ini membantu membuat kode Anda lebih ekspresif dan mudah dipahami.
Koleksi Tak Dapat Dimodifikasi
Java 10 memperkenalkan metode pabrik baru untuk membuat salinan tak dapat dimodifikasi dari koleksi. Metode ini tersedia untuk List, Set, dan Map.
public class UnmodifiableCollectionsExample {
public static void main(String[] args) {
List<String> fruits = Arrays.asList("Apple", "Banana", "Cherry");
List<String> unmodifiableFruits = List.copyOf(fruits);
try {
unmodifiableFruits.add("Date");
} catch (UnsupportedOperationException e) {
System.out.println("Tidak dapat memodifikasi daftar yang tak dapat dimodifikasi!");
}
}
}
Dalam contoh ini, List.copyOf()
membuat salinan tak dapat dimodifikasi dari daftar asli. Setiap upaya untuk memodifikasi daftar ini akan menghasilkan UnsupportedOperationException
.
Peningkatan Performa
Java 10 juga membawa beberapa peningkatan di bawah permukaan yang meningkatkan performa.
Parallel Full GC untuk G1
Pengumpul sampah Garbage-First (G1), yang menjadi default di Java 9, mendapat peningkatan di Java 10. Full GC (pengumpulan sampah) untuk G1 sekarang paralel, yang dapat secara signifikan mengurangi waktu jeda di heap besar.
Meskipun Anda mungkin tidak secara langsung berinteraksi dengan fitur ini dalam kode Anda, itu baik untuk mengetahui bahwa aplikasi Java Anda memiliki potensi untuk berjalan lebih cepat dan lebih efisien.
Pemasyarakatan Class-Data
Java 10 memperluas fitur Class-Data Sharing (CDS) yang sudah ada untuk memungkinkan kelas aplikasi dipasang dalam arsip bersama. Ini dapat meningkatkan waktu startup dan mengurangi footprint memori, khususnya saat beberapa JVM menjalankan aplikasi yang sama di mesin yang sama.
Untuk menggunakan fitur ini, Anda perlu menjalankan aplikasi Anda dengan argumen JVM tertentu. Berikut adalah contoh:
# Langkah 1: Buat arsip bersama
java -Xshare:dump -XX:+UseAppCDS -XX:DumpLoadedClassList=classes.lst -cp myapp.jar MyApp
# Langkah 2: Jalankan aplikasi menggunakan arsip bersama
java -Xshare:on -XX:+UseAppCDS -XX:SharedArchiveFile=classes.jsa -cp myapp.jar MyApp
Fitur ini sangat berguna untuk microservices dan aplikasi berbasis kontainer di mana waktu startup cepat sangat penting.
Kesimpulan
Java 10, meskipun merupakan rilis yang relatif kecil, membawa beberapa fitur nilai yang dapat meningkatkan pengalaman pengodingan Anda. Dari kemudahan inferensi tipe variabel lokal hingga peningkatan performa dengan parallel full GC untuk G1 dan pemasyarakatan class-data, fitur ini menambahkan keefisienan dan kepuasan pengembangan ke bahasa Java.
Ingat, cara terbaik untuk belajar fitur ini adalah dengan praktik. Cobalah untuk menggabungkannya ke dalam proyek Anda, dan Anda akan segera melihat bagaimana mereka dapat meningkatkan kode Anda. Selamat mengoding, dan semoga perjalanan Java Anda penuh dengan penemuan menarik!
| Fitur | Deskripsi | Contoh |
|-------|-----------|--------|
| Inferensi Tipe Variabel Lokal | Memungkinkan penggunaan `var` untuk deklarasi variabel lokal | `var message = "Hello, Java 10!";` |
| Optional.orElseThrow() | Metode baru di kelas Optional yang melempar eksepsi jika Optional kosong | `String result = optional.orElseThrow();` |
| Koleksi Tak Dapat Dimodifikasi | Metode pabrik untuk membuat salinan tak dapat dimodifikasi dari koleksi | `List<String> unmodifiableFruits = List.copyOf(fruits);` |
| Parallel Full GC untuk G1 | Peningkatan performa untuk pengumpul sampah G1 | N/A (fitur JVM) |
| Pemasyarakatan Class-Data | Meningkatkan waktu startup dan mengurangi footprint memori | Memerlukan argumen JVM tertentu |
Credits: Image by storyset