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. NPE 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.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.
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?
- Pemeriksaan waktu kompilasi yang lebih baik : Jika Anda menggunakan tipe objek selain yang Anda tentukan, kompiler akan memberitahukannya kepada Anda.
- 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.
- Ini bagus untuk struktur data dan algoritme : ArrayList dan HashMap hanyalah beberapa contoh penggunaan Generik.
GO TO FULL VERSION