java
Dalam tutorial ini, kita akan belajar tentang Java Generics, cara membuat class dan method generics dan kelebihannya dengan bantuan contoh.
Java Generics memungkinkan kita untuk membuat satu kelas, antarmuka, dan metode yang dapat digunakan dengan berbagai jenis data (objek).
Ini membantu kami untuk menggunakan kembali kode kami.
Catatan :Generik tidak bekerja dengan tipe primitif (int
, float
, char
, dll).
Kita dapat membuat kelas yang dapat digunakan dengan semua jenis data. Kelas seperti itu dikenal sebagai Kelas Generik.
Berikut adalah cara membuat kelas generik di Java:
class Main {
public static void main(String[] args) {
// initialize generic class
// with Integer data
GenericsClass<Integer> intObj = new GenericsClass<>(5);
System.out.println("Generic Class returns: " + intObj.getData());
// initialize generic class
// with String data
GenericsClass<String> stringObj = new GenericsClass<>("Java Programming");
System.out.println("Generic Class returns: " + stringObj.getData());
}
}
// create a generics class
class GenericsClass<T> {
// variable of T type
private T data;
public GenericsClass(T data) {
this.data = data;
}
// method that return T type variable
public T getData() {
return this.data;
}
}
Keluaran
Generic Class returns: 5 Generic Class returns: Java Programming
Pada contoh di atas, kami telah membuat kelas generik bernama GenericsClass . Kelas ini dapat digunakan untuk bekerja dengan semua jenis data.
class GenericsClass<T> {...}
Di sini, T digunakan di dalam kurung sudut <>
menunjukkan parameter jenis . Di dalam Main
kelas, kami telah membuat dua objek GenericsClass
Integer
. Sekarang, GenericsClass bekerja dengan data bilangan bulat.String
. Sekarang, GenericsClass bekerja dengan data string.Mirip dengan kelas generik, kami juga dapat membuat metode yang dapat digunakan dengan semua jenis data. Kelas seperti itu dikenal sebagai Metode Generik.
Berikut adalah cara membuat kelas generik di Java:
class Main {
public static void main(String[] args) {
// initialize the class with Integer data
DemoClass demo = new DemoClass();
// generics method working with String
demo.<String>genericsMethod("Java Programming");
// generics method working with integer
demo.<Integer>genericsMethod(25);
}
}
class DemoClass {
// creae a generics method
public <T> void genericsMethod(T data) {
System.out.println("Generics Method:");
System.out.println("Data Passed: " + data);
}
}
Keluaran
Generics Method: Data Passed: Java Programming Generics Method: Data Passed: 25
Pada contoh di atas, kami telah membuat metode generik bernama genericsMethod .
public <T> void genericMethod(T data) {...}
Di sini, parameter tipe <T>
dimasukkan setelah pengubah public
dan sebelum mengembalikan ketik void
.
Kita dapat memanggil metode generik dengan menempatkan tipe sebenarnya <String>
dan <Integer>
di dalam kurung sebelum nama metode.
demo.<String>genericMethod("Java Programming");
demo.<Integer>genericMethod(25);
Catatan :Kita dapat memanggil metode generik tanpa menyertakan parameter type. Misalnya,
demo.genericsMethod("Java Programming");
Dalam hal ini, kompiler dapat mencocokkan parameter tipe berdasarkan nilai yang diteruskan ke metode.
Secara umum, parameter jenis dapat menerima tipe data apa pun (kecuali tipe primitif).
Namun, jika kita ingin menggunakan generik untuk beberapa tipe tertentu saja (seperti menerima data tipe bilangan), maka kita dapat menggunakan tipe terikat.
Dalam kasus tipe terikat, kami menggunakan extends
kata kunci. Misalnya,
<T extends A>
Ini berarti T hanya dapat menerima data yang merupakan subtipe dari A .
class GenericsClass <T extends Number> {
public void display() {
System.out.println("This is a bounded type generics class.");
}
}
class Main {
public static void main(String[] args) {
// create an object of GenericsClass
GenericsClass<String> obj = new GenericsClass<>();
}
}
Pada contoh di atas, kita telah membuat sebuah kelas bernama GenericsClass. Perhatikan ekspresinya, perhatikan ekspresinya
<T extends Number>
Di sini, GenericsClass dibuat dengan tipe terbatas. Ini berarti GenericsClass hanya dapat bekerja dengan tipe data yang merupakan turunan dari Number
(Integer
, Double
, dan seterusnya).
Namun, kami telah membuat objek dari kelas generik dengan String
. Dalam hal ini, kita akan mendapatkan kesalahan berikut.
GenericsClass<String> obj = new GenericsClass<>(); ^ reason: inference variable T has incompatible bounds equality constraints: String lower bounds: Number where T is a type-variable: T extends Number declared in class GenericsClass
Dengan bantuan generik di Java, kita dapat menulis kode yang akan bekerja dengan berbagai jenis data. Misalnya,
public <T> void genericsMethod(T data) {...}
Di sini, kami telah membuat metode generik. Metode yang sama ini dapat digunakan untuk melakukan operasi pada data integer, data string, dan sebagainya.
parameter jenis of generics memberikan informasi tentang tipe data yang digunakan dalam kode generics. Misalnya,
// using Generics
GenericsClass<Integer> list = new GenericsClass<>();
Di sini, kita tahu bahwa GenericsClass bekerja dengan Integer
data saja.
Sekarang, jika kita mencoba mengirimkan data selain Integer ke kelas ini, program akan menghasilkan kesalahan pada waktu kompilasi.
Kerangka koleksi menggunakan konsep generik di Jawa. Misalnya,
// creating a string type ArrayList
ArrayList<String> list1 = new ArrayList<>();
// creating a integer type ArrayList
ArrayList<Integer> list2 = new ArrayList<>();
Dalam contoh di atas, kita telah menggunakan kelas ArrayList yang sama untuk bekerja dengan tipe data yang berbeda.
Mirip dengan ArrayList
, koleksi lainnya (LinkedList
, Queue
, Maps
, dan seterusnya) juga generik di Java.
java
Kelas Penulis Java Dalam tutorial ini, kita akan belajar tentang Java Writer, subclass-nya dan metodenya dengan bantuan sebuah contoh. Writer kelas java.io package adalah superclass abstrak yang mewakili aliran karakter. Sejak Writer adalah kelas abstrak, itu tidak berguna dengan sendirinya. Namun
Kelas InputStreamReader Java Dalam tutorial ini, kita akan belajar tentang Java InputStreamReader dan metodenya dengan bantuan contoh. InputStreamReader kelas java.io package dapat digunakan untuk mengubah data dalam byte menjadi data dalam karakter. Ini memperluas kelas abstrak Reader . InputS
Kelas OutputStreamWriter Java Dalam tutorial ini, kita akan belajar tentang Java OutputStreamWriter dan metodenya dengan bantuan contoh. OutputStreamWriter kelas java.io package dapat digunakan untuk mengubah data dalam bentuk karakter menjadi data dalam bentuk byte. Ini memperluas kelas abstrak W
Kelas Pembaca File Java Dalam tutorial ini, kita akan belajar tentang Java FileReader dan metodenya dengan bantuan contoh. FileReader kelas java.io package dapat digunakan untuk membaca data (dalam karakter) dari file. Ini memperluas InputSreamReader kelas. Sebelum Anda mempelajari tentang File