Java 14 akan datang



Menurut Oracle, rilis Java 14 dijadwalkan untuk 17 Maret. Saya ingin tahu apakah tanggal rilis terkait dengan Hari St. Patrick (yang dirayakan pada hari ini) atau tidak kita akan segera mengetahuinya. Mari kita lihat inovasi yang akan tersedia di Jawa baru dan putuskan apakah kita akan minum bir untuk suka atau duka.

Rekaman


Fitur bahasa yang secara fundamental baru, tersedia dalam mode pratinjau di Jawa 14. Tujuan utamanya adalah untuk menyingkirkan banyak bihun dalam kode. Catatan harus menggantikan kelas yang hanya digunakan untuk menyimpan data di bidang tanpa perilaku yang dijelaskan. Tentukan Record , dan kompiler itu sendiri akan menghasilkan konstruktor, getter, equals () dan hashCode (), toString () metode. Di suatu tempat kita sudah melihatnya, kan, Pak Lombok? Entri adalah sebagai berikut:

public record Person(String name, int age){}

Untuk mengkompilasi Catatan, Anda harus mengunduh jdk14 dan memasukkan perintah berikut:

javac —enable-preview —release 14 Person.java

Kami mendekompilasi dan melihat apa yang dilakukan kompiler:

public final class Person extends java.lang.Record {
    private final java.lang.String name;
    private final int age;

    public Person(java.lang.String name, int age) { /* compiled code */ }

    public java.lang.String toString() { /* compiled code */ }

    public final int hashCode() { /* compiled code */ }

    public final boolean equals(java.lang.Object o) { /* compiled code */ }

    public java.lang.String name() { /* compiled code */ }

    public int age() { /* compiled code */ }
}

Jadi, alih-alih Record, kami mendapat kelas final yang mewarisi dari kelas Record abstrak yang baru . Dan seperti yang diharapkan, kami mendapatkan getter, konstruktor, equals (), hashCode (), toString () yang dihasilkan . Perhatikan bahwa semua bidang ditandai sebagai final , yang berarti bahwa kita tidak dapat mendefinisikannya kembali, namun, Rekaman itu sendiri tidak sepenuhnya tidak berubah, karena benda yang disimpan dalam bidang bisa berubah-ubah. Diskusi terperinci tentang Catatan dapat ditemukan di sini .

NullPointerExceptions yang banyak bicara


Yang lebih ramah adalah NullPointerExceptions . Tidak, kompiler masih tidak tahu cara memperbaiki NPE untuk kami, tetapi sekarang deskripsi pengecualian akan menjadi lebih informatif. Kami mensimulasikan situasi: kami memanggil NPE di Java 11 dan Java 14. Sebagai contoh, kami memiliki komposisi yang kompleks, khas Entity , dan untuk mendapatkan data, kami perlu memanggil beberapa objek dari sumber untuk sampai ke bidang yang diinginkan, jadi:

var street = message.getAuthor().getAddress().getStreet();

Di Java 11, kami mendapatkan log kesalahan lama yang akrab yang meninggalkan pertanyaan utama: Siapa yang nol? Pesan, Penulis, Alamat?

Exception in thread "main" java.lang.NullPointerException
	at Main.main(Main.java:11)

Untuk menjalankan di Java 14, Anda perlu mengkompilasi kelas dengan cara yang sama seperti Catatan di atas:

javac —enable-preview —release 14 Main.java

Dan jalankan dengan menambahkan bendera khusus:

java -XX:+ShowCodeDetailsInExceptionMessages --enable-preview Main

Sebagai hasil dari eksekusi, kami mendapatkan output berikut:

Exception in thread "main" java.lang.NullPointerException: Cannot invoke "Address.getStreet()" because the return value of "Author.getAddress()" is null
	at Main.main(Main.java:11)

Seperti yang bisa kita lihat, pesannya menjadi lebih informatif, dan kita bisa melihat di mana tepatnya dalam rantai panggilan NPE terjadi .

Blok teks


Blok teks yang diperkenalkan kembali di Java 13 juga tersedia di Java 14 sebagai fitur pratinjau. Biarkan saya mengingatkan Anda bahwa tugas utama mereka adalah menyederhanakan pekerjaan dengan multi-line literals. Fitur yang sangat nyaman untuk menulis kueri SQL, kode HTML, JSON . Saya pikir ini adalah salah satu fitur yang akan menjadi sangat berguna. Ingat sintaksnya. Sebagai contoh, kita perlu menulis kueri SQL . Sebelum Java 13, kami akan menggunakan rangkaian string untuk menulis kueri yang dapat dibaca, dan kueri akan terlihat seperti ini:

String sql = "SELECT name, age " +
                 "FROM PERSON" +
                 "WHERE name = \'Igor\'" +
                 "AND car=\'Niva\'";

Dimulai dengan Java 13, kita dapat menggunakan blok teks dengan menulis garis antara tanda kutip rangkap tiga seperti ini:


    String sql = """ 
                 SELECT name, age 
                 FROM PERSON
                 WHERE name = 'Igor'
                   AND car='Niva'
                 """;

Java 14 menambahkan dua pembatas baru yang dapat digunakan dalam blok teks. Yang pertama adalah ruang tunggal: \ s . Yang kedua adalah karakter baris baru: \ .

Alihkan ekspresi


Dimulai dengan Java 14, beralih ekspresi bergerak dari fitur pratinjau ke fitur lengkap. Mari kita mengingat secara singkat fitur-fitur dari operator baru:

  • Sintaks Lambda
  • Kemampuan untuk menggunakan lebih dari satu ekspresi dalam sebuah kasus
  • Output galat jika terjadi cakupan nilai switch () yang tidak lengkap . Dengan kata lain, jika Anda menggunakan enumerasi:

    public enum  Car {
        NIVA, NEXIA, KIA
    }

    Kemudian jika Anda menulis sakelar () sebagai berikut, kompiler akan menampilkan kesalahan yang mengatakan bahwa tidak semua kasus yang mungkin dari pencacahan terdaftar:

    switch (car) {
        case NIVA -> System.out.println("Niva");
        case NEXIA -> System.out.println("Nexia");
    }
    // error: the switch expressions does not cover all possible input values.

  • Kemampuan untuk mengembalikan nilai:

    var avto = switch (car) {
        case NIVA, KIA -> "Niva are better";
        case NEXIA -> "Nexia";
        default -> "Niva still better";
    };


Pencocokan pola


Pattern Matching adalah fitur pratinjau baru yang tersedia di Java 14. Sudah banyak pembicaraan tentang hal itu, banyak yang telah menunggunya, dan ini dia. Tujuannya adalah untuk menggabungkan pemeriksaan tipe objek dan konversinya dalam instanceof operator . Dengan kata lain, sebelum Jawa 14 kita akan menulis seperti ini:

Object obj = "Igor";

if (obj instanceof String) {
    String s = (String) obj;
    System.out.println(s.length());
}

Itu untuk menggunakan metode kelas yang menjadi objeknya, Anda harus melemparkannya ke kelas ini. Dimulai dengan Java 14, sintaks baru tersedia di mana instanceof menggabungkan fungsi validasi dan konversi:

Object obj = "Igor";

if (obj instanceof String s){
    System.out.println(s.length());
}

Kesimpulan


Java terus berkembang, membuat hidup lebih mudah bagi pengembang fana biasa. Fitur baru dirancang untuk membuat kode lebih bersih, lebih mudah, gaji lebih tinggi. Bagaimana menurut Anda, fitur baru mana yang akan memenangkan cinta komunitas?

All Articles