Jumat, 15 Agustus 2014

Generic

Generic in Java
          Pemrograman Fasilitas Generik ditambahkan ke bahasa pemrograman Java pada tahun 2004 sebagai bagian dari J2SE 5.0
          Memungkinkan jenis atau fungsi yang akan dioperasikan dalam berbagai jenis objek data pada waktu kompilasi
          Mendefinisikan kelas atau fungsi dengan jenis generik yang dapat diganti dengan beton tipe data oleh compiler.
          String dan Nomor adalah jenis data konkret untuk menimpa tipe data generik.
Keuntungan dari Kelas Generic
          Memungkinkan kompilasi deteksi kesalahan saat (kompilasi) dibandingkan dengan waktu dari program (runtime).
          Sebuah kelas generik atau fungsi memungkinkan kita sebagai programmer untuk membuat beberapa jenis objek atau fungsi yang akan dibuat.
Motivations
          Example interface with generic type

          Di mana <T> dianggap sebagai jenis generik formal, yang dapat di substitusi dengan jenis tertentu kemudian.
          Pergantian jenis generik disebut Instansiasi generik
          Jenis Generik harus menjadi acuan untuk jenis lain
          Hal ini tidak dapat diganti dengan tipe data primitif seperti int, ganda atau arang.
          Modal seperti huruf T dan E selalu digunakan untuk mengacu pada jenis generik.
          ArrayList, iterator, LinkedList dan Vector adalah contoh dari kelas generik
ArrayList
          An example of Generic Class in JDK 1.5                 
                ArrayList<String> list = new ArrayList<String>();
Kami hanya dapat menambahkan String dalam daftar objek. contoh:
                list.add(“Red”);
Jika nilai tidak String, maka akan terjadi ketika kesalahan kompilasi, Contoh:
                list.add(new Integer(1));
Casting tidak diperlukan untuk mengambil nilai dari daftar dengan jenis tertentu elemen karena compiler sudah tahu jenis elemen. contoh:
ArrayList<Double> list = new ArrayList<Double>();
2  list.add(5.5);  //secara otomatis konversi ke new Double(5.5)
3  list.add(3.0);  //secara otomatis konversi ke new Double(3.0)
Double obj = list.get(0); //casting tidak dibutuhkan
double d = list.get(1);  //secara otomatis konversi ke double
 
 





Dalam daftar line 4 diberi nilai objek dari kelas dua. Casting tidak diperlukan karena daftar telah dinyatakan objek ganda.
 Pada daftar baris 5 diberikan dua kali nilai variabel, maka secara otomatis akan dikonversi ke tipe data primitif.
Generic Class Declaration
 mengutip contoh dari daftar dan antarmuka iterator dalam paket java.util:

          
public interface List<E>
{
            void add(E x);
            Iterator<E> iterator();
}
public interface Iterator<E>
{
            E next();
            boolean hasNext();
}
  
          tidak dapat membuat objek instan menggunakan parameter jenis generik. contoh:
                                                new E() or new E[10]  à False
          Tidak dapat pengganti tipe data generik dengan tipe primitif data (int, double, char, dll) sebagai tipe data generik harus menjadi tipe data referensi.
          class wrapper dapat diganti sebagai Integer, Double, Character, dll

Generic Class
Example
public class Box<T> {
            private T t; // T is a type         
            public void add(T t){
                        this.t = t;
            }
           public T get(){
                        return t;
            }
}
 


 kita bisa menggunakannya dengan cara:

public class BoxDemo3 {
    public static void main(String[] args) {
        Box<Integer> integerBox = new Box<Integer>();
        integerBox.add( new Integer(10) );
        Integer someInteger = integerBox.get();  //Not a type casting
        System.out.println( someInteger );
    }
}
 

Generic Method
          juga dapat menggunakan jenis generik untuk deklarasi fungsi generik.
          contoh fungsi cetak generik untuk mencetak array obyek:



Wildcard
          Jenis parameter dengan bentuk "?".
          Memberikan yang tepat elemen dari suatu obyek dengan wildcard diketahui, ditempatkan pembatasan pada jenis fungsi yang disebut dalam suatu objek.
          <?> Daftar menunjukkan bahwa daftar memiliki jenis objek yang tidak diketahui Tension Wildcard: Unbounded wildcard to form ? extends Object example :
        Wildcard Unbounded untuk membentuk? meluas contoh Object:
        <? Memperpanjang Nomor> adalah jenis wildcard adalah referensi ke nomor tersebut.
        - Wildcard Bounded untuk membentuk? meluas T di mana referensi wildcard dengan jenis T.
        - Wildcard terikat rendah untuk membentuk? Super T dimana mengacu pada jenis super T.Example :
public static double max ( TesGenerik<? extends Number>  tes )
{
                // Statements
}
<? extends Number>  adalah jenis wildcard yang mengacu kelas Number atau subtipe kelas Number. Jadi kita bisa memanggil dengan:
          max(new TesGenerik<Integer>()) , or
          max(new TesGenerik<Double>())


Tidak ada komentar:

Posting Komentar