Menggunakan metoda generik (generic method) di program Java

Menggunakan Metoda Generik Di Java

Di setiap rilis Java versi yang terbaru, akan selalu diikuti dengan adanya penambahan dan peningkatan fitur dari bahasa tersebut. Penambahan dapat berupa adanya fitur-fitur baru (kelas-kelas atau interfes Java baru) di API Java atau peningkatan pada sintaksis bahasa (language sintax). Dari sisi sintaksis bahasa, peningkatan yang cukup siknifikan di Java SE 7 adalah penggunaan tipe-tipe generik (generic types).

1. Deklarasi metoda generik.

Maksud utama adanya fitur generik di Java adalah untuk keamanan tipe (type safety). Interface (Interfes), class (kelas), construktor (konstruktor) dan method (metoda) yang dideklarasikan generik harus menggunakan pamameter tipe (type parameter). Parameter tipe adalah placeholder untuk tipe yang sesungguhnya. Parameter tipe hanya bekerja untuk tipe acuan (variabel dengan tipe interfes atau kelas Java). Berikut ini adalah sintaksis deklarasi metoda generik (generic method).

penentu <T> tipe-nilai-dikembalikan nama-metoda(daftar-parameter) {
   // deklarasi dan pernyataan
}

T di dalam kurung sudut adalah parameter tipe. Parameter tipe di metoda generik bersifat lokal, artinya cakupannya dimulai dari posisi dimana parameter tipe dideklarasikan dan berlanjut sampai akhir blok metoda generik. Sebagai contoh, berikut ini adalah deklarasi metoda generik cetakNilai yang tidak mengembalikan nilai (void return value):

public static <T> void printNilai(T nilai) {
   System.out.println("Nilai : " + nilai);
}

Sebuah metoda generik, selain menjadi bagian dari kelas generik (generik class) juga dapat menjadi bagian dari kelas biasa (ordinary class). Deklarasi metoda generik mempunyai bagian parameter tipe (type parameter section) yang diletakkan di dalam tanda kurung sudut (< >) sebelum tipe-nilai-dikembalikan. Setiap bagian parameter tipe dapat berisi satu atau lebih parameter tipe (disebut juga type variable) yang dipisah koma.

Baca artikel Mendefinisikan Kelas Generik Di Program Java

Parameter tipe digunakan sebagai tipe nilai yang dikembalikan oleh metoda generik dan juga sebagai placeholder untuk tipe argumen yang diberikan ke metoda generik. Metoda generik juga dapat memiliki tipe parameter lain selain parameter tipe dari kelasnya.

Secara kaidah, nama-nama parameter tipe adalah karakter huruf besar tunggal apa saja. Mengabaikan kaidah penamaan untuk parameter tipe akan dapat menyulitkan ketika membedakan dengan nama-nama variabel dan kelas. Nama-nama parameter tipe yang paling umum digunakan adalah E (element), K (key), T (type), N (number), V (value), S, U, V dan sebagainya.

Baca artikel:

2. Motivasi untuk metoda generik.

Di metoda generik, parameter tipe, misalnya T, dapat digunakan sebagai tipe umum (generic type) untuk parameter metoda. Ketika sebuah kelas mendeklarasikan berulang-ulang metoda dengan nama sama tetapi dengan parameter berbeda (overloading method), metoda-metoda tersebut dapat diwakili oleh satu metoda generik dengan T sebagai tipe parameter yang akan mewakili tipe-tipe parameter dari semua metoda.

Dua contoh program berikut adalah program serupa dimana yang satu menggunakan overloading method dan yang lain menggunakan metoda generik. Berikut ini adalah kode program untuk mencetak nilai-nilai tipe berbeda yang tersimpan di beberapa variabel menggunakan overloading method.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
// Nama file : PrintNilai.java
// Mencetak berbagai tipe nilai
 
// Deklarasi kelas
public class PrintNilai {
    
   // Metoda main
   public static void main(String[] args) {
 
      // Deklarasi dan pemberian nilai awal ke variabel
      Integer varInt = 8652339;
      Double varDouble = 96342.7656;
      Character varChar = 'H';
      String varString = "Belajar Java.";
 
      System.out.println();
      System.out.println("Nilai-nilai yang dicetak:");
 
      // Memanggil overloading metoda print
      print(varInt);
      print(varDouble);
      print(varChar);
      print(varString);         
   }
 
   // Metoda print untuk mencetak nilai tipe long
   public static void print(Integer nilaiInteger) {
      System.out.println(nilaiInteger);
   }
 
   // Metoda print untuk mencetak nilai tipe double
   public static void print(Double nilaiDouble) {
      System.out.println(nilaiDouble);
   }
 
   // Metoda print untuk mencetak nilai tipe char
   public static void print(Character nilaiChar) {
      System.out.println(nilaiChar);
   }
 
   // Metoda print untuk mencetak nilai tipe String
   public static void print(String nilaiString) {
      System.out.println(nilaiString);
   }
}

Menggunakan metoda generik (generic method) di Java

Di artikel Konversi Data Dari String Ke Tipe-Tipe Numerik Di Java, Anda telah diperkenalkan dengan numeric wrapper class. Numeric wrapper class digunakan untuk memanipulasi tipe-tipe numerik primitif seperti byte, short, int, long, float dan double sebagai obyek.

Selain numeric wrapper class, tipe data primitif lainnya yang memiliki type wrapper class adalah char dan boolean. Type wrapper class untuk tipe char dan boolean adalah Character dan Boolean. Di Java, Byte, Short, Integer, Long, Float, Double, Character dan Boolean adalah kelas-kelas Java yang terletak di paket java.lang.

Baris nomor 11 – 14 adalah deklarasi variabel dengan tipe Integer, Double, Character dan String. Setiap variabel langsung diberi nilai dalam bentuk literal numerik, karakter dan string. Literal numerik dan karakter dapat diberikan ke variabel yang menggunakan tipe wrapper class karena adanya konversi otomatis yang disebut outoboxing yaitu konversi otomatis oleh kompiler Java dari tipe data primitif ke type wrapper class.

Baris nomor 20 – 23 adalah pernyataan untuk memanggil overloading method print. Di setiap pemanggilan metoda print, kompiler Java akan menentukan secara otomatis metoda mana yang paling spesifik digunakan berdasarkan nama metoda dan parameter yang sesuai dengan tipe argumen yang diberikan.

Sebagai contoh, untuk metoda print(varInt), kompiler Java akan memanggil metoda yang dideklarasikan di baris nomor 27 – 29 karena paling spesifik yaitu argumen yang diberikan, varInt, sesuai dengan tipe parameter metoda yaitu Integer jika dibandingkan dengan tiga deklarasi metoda yang lain.

Baris nomor 28, 33, 38 dan 43 adalah pernyataan untuk menampilkan nilai. Ada perbedaan dalam menampilkan nilai yang tersimpan di variabel tipe primitif dan variabel tipe kelas. Untuk variabel tipe primitif, nilai yang tersimpan langsung ditampilkan, sedangkan untuk variabel tipe kelas, string yang merupakan representasi obyek yang ditampilkan.

Kelas Object berada di puncak teratas dalam hirarkhi turunan kelas di Java. Langsung maupun tidak langsung, semua kelas adalah turunan kelas Object. Kelas turunan akan mewarisi metoda yang dimiliki oleh kelas Object, termasuk metoda spesial toString. Untuk menampilkan nilai yang merupakan representasi obyek sebuah kelas, metode toString bisa disertakan dan bisa juga tidak.

Berikut ini adalah penyederhanaan contoh kode program sebelumnya dengan menggunakan satu metoda generik. Tipe parameter dari overloading method di contoh kode program sebelumnya dapat diwakili oleh tipe parameter umum misalnya T. Contoh kode program GenericPrintNilai akan mencetak nilai-nilai dari tipe berbeda yang tersimpan di beberapa variabel menggunakan metoda generik.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// Nama file : GenericPrintNilai.java
// Mencetak berbagai tipe nilai
 
// Deklarasi kelas
public class GenericPrintNilai {
    
   // Metoda main
   public static void main(String[] args) {
 
      // Deklarasi dan pemberian nilai awal ke variabel
      Integer varInt = 8652339;
      Double varDouble = 96342.7656;
      Character varChar = 'H';
      String varString = "Belajar Java.";
 
      System.out.println();
      System.out.println("Nilai-nilai yang dicetak:");
 
      // Memanggil generic method print
      print(varInt);
      print(varDouble);
      print(varChar);
      print(varString);        
   }
 
   // Generic method untuk mencetak nilai berbegai tipe
   public static <T> void print(T nilai) {
      System.out.println(nilai);
   }
}

Menggunakan metoda generik (generic method) di Java

Baris 27 -29 adalah deklarasi metoda generik print yang mewakili overloading method print di contoh program sebelumnya (program PrintNilai). T yang terletak di dalam kurung sudut adalah parameter tipe. Parameter tipe hanya bekerja untuk tipe acuan (variabel yang dideklarasikan dengan tipe interfes dan kelas Java) dan tidak bisa untuk tipe-tipe primitif.

Di deklarasi metoda generik print, parameter tipe T juga digunakan sebagai tipe parameter metoda nilai. Karena T hanya bekerja untuk tipe acuan, maka argumen untuk parameter metoda bisa berupa variabel-variabel dengan tipe-tipe kelas termasuk disini kelas Byte, Short, Integer, Long, Float, Double, Character dan Boolean.

Ketika metoda print dengan tipe parameter berdeda dipanggil, program akan menggunakan satu metoda generik print untuk mewakili semua panggilan metoda tersebut. Parameter metoda generik nilai tipe T dapat menerima nilai variabel varInt, varDouble, varChar dan varString yang dideklarasikan dengan tipe kelas Integer, Double, Character dan String.

Karena variabel varInt, varDouble, varChar dan varString yang diberikan ke metoda print sebagai argumen dari parameter metoda generik adalah dari tipe acuan atau tipe kelas-kelas Java, maka nilai yang ditampilkan adalah string yang merupakan representasi obyek dari kelas Integer, Double, Character dan String.

SUKAI DAN BAGIKAN ARTIKEL INI:
Pin It