This is blog for Developer

Kamis, 04 Mei 2017

Generics

Generics

Pengertian Generics
Generics merupakan cara Java dalam melakukan generalisasi terhadap tipe data tanpa

mengurangi kemampuan Java dalam menjaga keamanan penggunaan tipe data. Pada object Box, kita bisa memasukkan sembarang object karena parameter pada method add() adalah Class Object, tapi pada saat mengambil object tersebut harus diubah sesuai dengan tipe dari object tersebut.


Cara mendeklarasikan Class Generics
Ubah class Box Non Generics menjadi class Box Generic. Pendeklarasian type generics
dengan mengubah public class Box() menjadi public class Box <T>
– T biasanya disebut parameter type formal (formal type parameter)
– T adalah type parameter yang akan diganti dengan tipe sebenarnya (Type dari T bisa berupa class, interface atau tipe variabel lainnya).
– T adalah nama dari type parameter.


Aturan Penamaan Type Parameter
Nama type parameter biasanya satu huruf dan huruf besar. Jenis nama tipe parameter
yang sering digunakan :
– E - Element (biasanya digunakan untuk Collection Framework)
– K – Key
– N – Number
– T - Type
– V - Value
– S,U,V dll. - 2nd, 3rd, 4th types


Generics pada Method
Pada contoh sebelumnya, kita mendefinisikan type parameter pada level class. Sebenarnya tipe variable ini juga dapat didefinisikan pada level method.
Contoh :
public class GenericMethodTest {
      public static<E> void printArray(E[] inputArray){
             for(E element : inputArray)
                   System.out.printf("%s",element);
                   System.out.println("");
     }
      public static void main(String[] args) {
            Integer[] intArray = {1,2,3,4,5} ;
            Double[] doubleArray = {1.1,2.2,3.3,4.4,5.5};
            Character[] charArray = {'J','A','V','A'};
            printArray(intArray);
            printArray(doubleArray);
            printArray(charArray);
      }
}


Subtyping
Jika B adalah suatu subtype dari A dan G adalah suatu tipe data generics, maka tidak berarti G<B> adalah subtype dari G<A>.


Generics pada Collection
•   List <E> myList ;
E disebut type variabel, variabel yang diganti dengan type. Jika E adalah class, maka kita
bisa melewatkan subclass E. Jika E adalah interface maka kita bisa melewatkan class yang mengimplementasikan E.



Type Parameter yang dibatasi
Jika kita ingin memberikan batasan type yang diperbolehkan untuk dilewatkan ke type
parameter. Contoh method dengan parameter number, hanya menerima object dari class
Number dan subclass. Hal ini yang disebut bounded type parameter.
•    Cara
<U extends Number>
•   Jika terdapat interface yang harus diimplementasikan gunakan &
<U extends Number & MyInterface>



Menggunakan Wildcard
Jika kita mendeklarasikan sebuah List<aType>, isi List adalah object dengan tipe aType,
maka kita bisa menyimpan di List object dengan tipe :
– Object dari aType
– Object dari subclass aType, jika aType adalah class
– Object dari class yang mengimplementasikan aType, jika aType adalah interface
Sedangkan List<?> berarti semua tipe data bisa masuk, terlalu luas bentuk lain :
List<? extends Number>

List<? extends T>
Share:

0 komentar:

Posting Komentar