Generic Matakuliah Pertemuan Tahun Versi : T0984 / Algoritma dan Metode Object Oriented Programming II :8 : 2008 : 1/0 Learning Outcomes Pada akhir pertemuan ini, diharapkan mahasiswa akan mampu: – Mendemonstrasikan generic programming dalam Java Programming. Bina Nusantara Outline Materi • • • • • • • Generic di Java Keuntungan Generic Class Motivations ArrayList Deklarasi Generic Class Generic Method Wildcard Bina Nusantara Generic di Java • Sebuah fasilitas dari Generic Programming yang telah ditambahkan ke dalam bahasa pemograman Java di tahun 2004 sebagai bagian dari J2SE 5.0 • Mengijinkan sebuah tipe atau fungsi untuk dioperasikan dalam objek-objek yang berbeda tipe datanya pada saat waktu kompile. • Mendefinisikan sebuah kelas atau fungsi dengan tipe generic yang dapat disubtitusikan dengan menggunakan tipe data yang kongkrit oleh kompiler. • String dan Number adalah tipe data yang kongkrit untuk menimpa tipe data generic. Bina Nusantara Keuntungan Generic Class • Memungkinkan pendeteksian error ketika waktu kompilasi (compile time) dibandingkan waktu jalannya program (runtime). • Sebuah generic class atau fungsi mengijinkan kita sebagai programmer untuk membuat secara spesifik tipe dari objek atau fungsi yang akan dibuat. Bina Nusantara Motivations • Contoh interface dengan Tipe Generik public interface Comparable{ public int compareTo(Object o) } • • Bina Nusantara public interface Comparable <T> { public int compareTo( T o ) } Dimana <T> dianggap sebagai sebuah tipe generik yang formal, dimana dapat di subtitusikan dengan sebuah tipe yang kongkrit nantinya. Subtitusi sebuah tipe generik disebut dengan generic instantiation. Motivations ( lanjutan …) • Tipe generik harus menjadi referensi bagi tipe lainnya. • Tidak dapat disubtitusikan dengan tipe data primitf seperti int, double atau char. • Huruf besar seperti T dan E selalu digunakan untuk menunjukan sebuah tipe generik. • ArrayList, Iterator, LinkedList dan Vector merupakan contoh kelas generik. Bina Nusantara ArrayList • Sebuah contoh generic class di JDK 1.5 ArrayList<String> list = new ArrayList<String>(); Kita hanya dapat menambahkan String dalam objek list,Contoh : list.add(“Red”); Jika memberikan nilai bukan String, maka akan terjadi error ketika di kompilasi, contoh : list.add(new Integer(1)); Bina Nusantara ArrayList ( lanjutan … ) • Casting tidak dibutuhkan untuk mengambil sebuah nilai dari sebuah list dengan sebuah tipe elemen yang spesifik karena kompiler sudah mengetahui tipe elemetnya. Contoh : 1 2 3 4 5 ArrayList<Double> list = new ArrayList<Double>(); list.add(5.5); //secara otomatis konversi ke new Double(5.5) 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 Pada baris ke-4 list diberikan nilai sebuah objek dari kelas Double. Casting tidak dibutuhkan karena list sudah dideklarasi untuk objek Double. Pada baris ke-5 list diberikan nilai sebuah variable double, maka secara otomatis akan di konversi ke tipe data primitif. Bina Nusantara Deklarasi Generic Class • Contoh kutipan dari interface List dan Iterator dalam pakage java.util : public interface List<E> { void add(E x); Iterator<E> iterator(); } public interface Iterator<E> { E next(); boolean hasNext(); } • • • Tidak dapat membuat sebuah instant objek menggunakan tipe parameter generik. Contoh : new E() atau new E[10] Salah Tidak dapat mensubtitusikan sebuah tipe data generik dengan tipe data primitif ( int, double, char, dll ) karena sebuah tipe data generik harus menjadi sebuah tipe data referensi. Kelas Wrapper dapat disubtitusikan seperti Integer, Double, Character, dll Bina Nusantara Generic Class ( lanjutan … ) Contoh public class Box<T> { private T t; // T adalah sebuah tipe public void add(T t) { this.t = t; } public T get() { return t; } } kita dapat 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(); //bukan casting nilai System.out.println( someInteger ); } } Bina Nusantara Generic Method • Dapat juga menggunakan tipe generik untuk deklarasi fungsi generik. • Contoh fungsi generik “print” untuk mencetak sebuah array dari objek : Bina Nusantara Wildcard • Tipe parameter dengan bentuk “?”. • Memberikan tipe elemen yang pasti dari suatu objek dengan sebuah wildcard yang tidak diketahui, batasanbatasannya ditempatkan pada tipe fungsi-fungsinya yang dipanggil dalam sebuah objek. • List<?> mengindikasikan sebuah list memiliki objek yang tidak diketahui tipenya. • Jenis Wildcard : – Unbounded wildcard dengan bentuk ? extends Object contoh : <? Extends Number> adalah tipe wildcard yang mereferensi ke Number. – Bounded wildcard dengan bentuk ? extends T dimana wildcard mereferensi ke tipe T. – Lower bound wildcard dengan bentuk ? super T dimana mereferensi pada tipe dari super-nya T. Bina Nusantara Wildcards ( lanjutan … ) • Contoh : public static double max ( TesGenerik<? extends Number> tes ) { // Statements } <? extends Number> adalah tipe wildcard yang mereferensi pada kelas Number atau subtipe dari kelas Number. Maka dapat kita panggil dengan : • max(new TesGenerik<Integer>()) , atau • max(new TesGenerik<Double>()) Bina Nusantara Referensi • Introduction to Java Programming. 7ed. Liang. 2009. Chapter 21, hal 713. • Generic Bina Nusantara http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf http://java.sun.com/j2se/1.5.0/docs/guide/language/generics.html http://en.wikipedia.org/wiki/Generics_in_Java http://java.sun.com/docs/books/tutorial/java/generics/index.html
© Copyright 2024 Paperzz