download

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