Jurusan Teknik Elektro Universitas Udayana
Generics
• Generics digunakan sebagai tipe data yang dapat didefinisikan
ketika sebuah class akan dipakai
• Konsep mendekati dengan generics java adalah typename/class
template pada C++
• sebuah template yang bertipe typename/class dapat digantikan
dengan tipe data lain, bergantung pada inisialisasi class-nya
• syntax yang digunakan pada java untuk mendefinisikan generics
Generics
Pada contoh sebelumnya, didefinisikan sebuah class T dan
generics X, dimana X nantinya dapat digantikan oleh tipe data apapun bergantung pada proses inisialisasinya. Contoh isi
Generics
• Pada contoh sebelumnya, ii merupakan class T yang generics X-nya didefinisikan sebagai Integer
• variabel ist merupakan class T yang generics X-nya didefinisikan sebagai string
• Pemberian generics boleh lebih dari 1 misal X, Y, Z.
• Contoh class yang menggunakan lebih dari 1 parameter adalah
HashMap<KeyType,ValueType>, dimana class
Generics
• Pemberian nama generics menurut standar adalah 1 huruf kapital • generics boleh digantikan dengan Object apapun, dan tidak dapat
Berikut ini contoh pengisian generics
dengan turunannya
• ArrayList pada contoh merupakan class yang memiliki 1
Nested Generics
Nested Generics merupakan generics yang digantikan dengan class yang memiliki parameter generics
Nested Generics
Pada contoh diibaratkan membuat array dinamis 2 dimensi yang mampu menyimpan string
Generic Method
Generic Method merupakan metode yang memiliki parameter generics
Parameter tersebut harus dituliskan sebelum nama fungsi
Generic Method
• Pada contoh sebelumnya, fungsi tersebut mencari tipe T dari
array V, dimana V merupakan turunan dari T
• dinamakan bounded type
• Contoh pemanggilan fungsi di atas adalah Constructor juga dapat
Generic Method
Pada contoh sebelumnya, tidak perlu mendefinisikan tipe data pada class, karena generics terdapat pada constructornya
Generic Interface
• generic dapat diberikan pada interface
• contoh, apabila membuat interface dengan bounded type
Comparable (yaitu object harus dapat di-compare) sbb.
• Pada interface di atas, implementasikan class untuk mencari
Generic Interface
Wildcard
• Wildcard digunakan sebagai pengganti generics
• Wildcard digunakan jika tidak mempedulikan tipe data dari generics
(tidak perlu tahu)
• Atau jika peduli tipe datanya tetapi tidak perlu untuk mendefinisikan
Collection
• Pada contoh, Collection<?> dapat dibaca sebagai “koleksi dari
sesuatu yang tidak diketahui”
• Collection merupakan parent dari ArrayList, HashMap dan TreeSet • Sehingga mampu mempassing ArrayList<Apapun> ke dalam fungsi
tsb.
• Mengapa tidak menggunakan Collection<Object>?
• Collection<Object> bukanlah tipe yang tepat sebagai parameter untuk turunan collection yang parameternya bukan Object, seperti ArrayList<String>
Bounded Wildcard
Bounded wildcard
wildcard yang dibatasi hanya dari class turunan (extends) atau parent (super) tertentu
Bounded Wildcard
Keyword extends pada contoh dapat digantikan dengan super, yang memiliki arti berbeda, yaitu hanya superclass dari
number yang boleh masuk ke dalam fungsi tersebut
Generic Class Inheritance
Sebuah class generic dapat diturunkan menjadi class generic, berikut contoh
Generic Class Inheritance
Informasi isi generics tidak tersedia saat runtime, sehingga, apabila menuliskan “ipp instanceof