JavaRush /Java Blog /Random-ID /Rehat kopi #98. Pengecualian Nullpointer baru di Java 17....

Rehat kopi #98. Pengecualian Nullpointer baru di Java 17. Apa arti di Java?

Dipublikasikan di grup Random-ID

Pengecualian Nullpointer baru di Java 17

Sumber: Dev.to Setiap pengembang Java harus mengetahui tentang keberadaan Nullpointer Exception atau NPE baru di Java 17. Ini adalah salah satu situasi yang harus selalu Anda coba cegah. Terkadang Nullpointer berarti Anda perlu men-debug kode Anda untuk menemukan bug kecil. Rehat kopi #98.  Pengecualian Nullpointer Baru di Java 17. Apa artinya <T>  di Jawa?  - 1NPE adalah pengecualian runtime yang terjadi ketika kode Anda ingin menggunakan objek atau referensi ke objek yang memiliki nilai null. Hal ini dapat terjadi jika tidak ada nilai yang ditetapkan atau objek tidak memiliki referensi. Sebelum OpenJDK versi terbaru (versi 17), pengecualian Nullpointer normal dalam pelacakan tumpukan akan terlihat seperti ini:
java.lang.NullPointerException: null
Tentu saja, bukan hanya itu yang perlu Anda ketahui tentang pelacakan tumpukan. Seperti yang Anda lihat, ini tidak menunjukkan di mana atau mengapa pengecualian ini terjadi. Lihat bagaimana Java 17 mengatasi masalah ini:
Exception in thread "main" java.lang.NullPointerException:
Cannot assign field "i" because "a" is null
at Prog.main(Prog.java:5)
Dalam contoh ini, pengecualian menunjukkan di mana dan apa referensi objek null kita. Sesederhana itu!

Apa arti <T> di Jawa?

Sumber: Dev.to <T> adalah huruf umum yang merupakan singkatan dari “Type” dan mengacu pada konsep Generik di Java. Anda dapat menggunakan huruf lain untuk ini, tetapi seperti yang Anda lihat, huruf T lebih disukai. Rehat kopi #98.  Pengecualian Nullpointer Baru di Java 17. Apa artinya <T>  di Jawa?  - 2

Apa itu Generik?

Generik adalah cara untuk membuat parameter kelas, metode, atau antarmuka. Mari kita lihat contoh generiknya:
package Generics;

class House<T>{

    T doorNumber;

    public House(T doorNumber) {
        this.doorNumber = doorNumber;
    }

    public void print(){
        System.out.println("Your house number is: " + this.doorNumber);
    }
}
  • Kami memiliki kelas bernama House yang dapat menerima tipe objek arbitrer.
  • Selanjutnya kita memiliki field bernama doorNumber , yang juga dapat menerima semua jenis objek.
  • Pada akhirnya kami mendeklarasikan konstruktor berparameter dan mencetak nomor pintu.
Sederhananya, pengguna dapat memutuskan apakah bilangan tersebut Integer, String, Float, dan sebagainya. CATATAN: Anda hanya dapat menggunakan Objects . Tipe primitif tidak didukung karena generik dimaksudkan untuk digunakan pada waktu kompilasi. Saat kita menggunakan Generik, T menggantikan apa pun yang dapat memperluas kelas Object , dan primitif tidak memiliki properti ini. Katakanlah kita ingin doorNumber berupa string.
public class GenericsExample {
    public static void main(String[] args) {
        House<String> mainHouse = new House<>("14a");
        mainHouse.print();

    }
}
Hasilnya akan terlihat seperti ini:
Nomor rumah Anda adalah: 14a
Kita akan mengganti huruf “T” dengan “String” dan memasukkan nomor rumah ke dalam konstruktor. Kita bisa menggunakan beberapa tipe jika, misalnya, kita membutuhkan sebuah kelas untuk menerima lebih dari satu objek. Kita dapat menambahkan huruf lain dan dengan demikian berkata: kita ingin kelas menerima Generik lain.
package Generics;

class House<T, V>{

    T doorNumber;
    V streetName;

    public House(T doorNumber, V streetName) {
        this.doorNumber = doorNumber;
        this.streetName = streetName;
    }

    public void print(){
        System.out.println("You live at: " + this.doorNumber + " " + this.streetName);
    }
}

public class GenericsExample {
    public static void main(String[] args) {
        House<Integer, String> mainHouse = new House<>(14, "Tellson Avenue");
        mainHouse.print();

    }
}
Hasilnya akan seperti ini:
Anda tinggal di: 14 Tellson Avenue
Sejauh ini kita telah melihat contoh penggunaan Generik di tingkat kelas. Namun kita juga dapat memiliki metode dan antarmuka yang umum.

Metode umum

package Generics;

class House{

    public <T> void print(T doorNumber){
        System.out.println("You live at house number: " + doorNumber);
    }

}

public class GenericsExample {
    public static void main(String[] args) {
        House mainHouse = new House();
        mainHouse.<Integer>print(14);

    }
}
Metode ini menerima semua tipe objek dan mengeluarkan nomor pintu, yang akan berupa tipe Object apa pun . Dalam hal ini, kami ingin metode menerima bilangan bulat. Hasilnya adalah:
Anda tinggal di rumah nomor: 14

Antarmuka umum

Pertama buat antarmuka.
package Generics;

interface Property<T>{
    void hasBalcony(T balcony);
}
Kemudian implementasikan antarmuka.
package Generics;

public class House implements Property<String> {

    @Override
    public void hasBalcony(String balcony) {
        System.out.println("Is there a balcony in the room? " + balcony);
    }

    public static void main(String[] args) {
        House mainHouse = new House();
        mainHouse.hasBalcony("YES");
    }

}
Hasil:
Apa ada balkon di dalam kamar? YA
Apa keuntungan menggunakan obat generik?
  1. Pemeriksaan waktu kompilasi yang lebih baik : Jika Anda menggunakan tipe objek selain yang Anda tentukan, kompiler akan memberitahukannya kepada Anda.
  2. Dapat digunakan kembali : Anda dapat menggunakan kelas, metode, atau antarmuka beberapa kali karena Anda memutuskan tipe objek mana yang akan digunakan bergantung pada apa yang ingin Anda capai.
  3. Ini bagus untuk struktur data dan algoritme : ArrayList dan HashMap hanyalah beberapa contoh penggunaan Generik.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION