PENGENALAN GENERIC TOPIK Mengapa harus Generic Mendeklarasikan Class

  • Slides: 26
Download presentation
PENGENALAN GENERIC

PENGENALAN GENERIC

TOPIK � Mengapa harus Generic? � Mendeklarasikan Class Generic � Batasan "Primitive" � Generic

TOPIK � Mengapa harus Generic? � Mendeklarasikan Class Generic � Batasan "Primitive" � Generic yang dibatasi (Constrained Generic) � Mendeklarasikan Method Generic

GENERIC � Telah disertakan pada rilis Java yang terbaru � Permasalahan dengan penentuan tipe

GENERIC � Telah disertakan pada rilis Java yang terbaru � Permasalahan dengan penentuan tipe (typecasting): � Downcasting merupakan hotspot yang potensial untuk Class. Cast. Exception � Membuat kode kita wordier � Lebih sedikit yang terbaca � Menghilangkan manfaat bahasa yang benar-benar diketik � Contoh: objek Array. List String my. String = (String) my. Array. List. get(0);

GENERIC � Mengapa harus generic? � Dapat memecahkan permasalahan dengan typecasting � Manfaat: �

GENERIC � Mengapa harus generic? � Dapat memecahkan permasalahan dengan typecasting � Manfaat: � Mengijinkan class tunggal bekerja dengan tipe-tipe yang luas � Cara alami untuk mengeliminasi kebutuhan casting � melindungi manfaat-manfaat dari pemeriksaan tipe � Contoh: objek Array. List //my. Array. List merupakan sebuah objek generic String my. String = my. Array. List. get(0);

GENERIC � Perhatian: Integer data = my. Array. List. get(0); � Penghapusan downcasting tidak

GENERIC � Perhatian: Integer data = my. Array. List. get(0); � Penghapusan downcasting tidak berarti bahwa Anda dapat memberikan apapun pada nilai kembali dari method get dan menghapuskan typecasting semuanya � Menugaskan yang lainnya selain String pada output dari method get akan menyebabkan waktu kompilasi menjadikan tipe tidak sepadan (mismatch) found: java. lang. String required: java. lang. Integer

GENERIC 1 2 3 4 5 6 7 // fragmen Code Array. List<String> gen.

GENERIC 1 2 3 4 5 6 7 // fragmen Code Array. List<String> gen. Arr. List = new Array. List<String>(); gen. Arr. List. add("A generic string"); String my. String = gen. Arr. List. get(0); //int my. Int = gen. Arr. List. get(); Joption. Pane. show. Message. Dialog(this, my. String);

MENDEKLARASIKAN CLASS GENERIC � � Agar fragmen kode yang sebelumnya dapat bekerja, kita harus

MENDEKLARASIKAN CLASS GENERIC � � Agar fragmen kode yang sebelumnya dapat bekerja, kita harus mendefinisikan sebuah versi generic dari class Array. List Versi Java terbaru telah menyediakan versi generic dari semua class-class Java Collection

MENDEKLARASIKAN CLASS GENERIC 1 2 3 4 5 6 7 8 9 10 class

MENDEKLARASIKAN CLASS GENERIC 1 2 3 4 5 6 7 8 9 10 class Basic. Generic<A> { private A data; public Basic. Generic(A data) { this. data = data; } public A get. Data() { return data; } } //berkelanjutan. . .

MENDEKLARASIKAN CLASS GENERIC 11 12 13 14 15 16 17 18 19 public class

MENDEKLARASIKAN CLASS GENERIC 11 12 13 14 15 16 17 18 19 public class Gen. Sample { public String method(String input) { String data 1 = input; Basic. Generic<String> basic. Generic = new Basic. Generic<String>(data 1); String data 2 = basic. Generic. get. Data(); return data 2; } // berkelanjutan. . .

MENDEKLARASIKAN CLASS GENERIC 20 21 22 23 24 25 26 27 public Integer method(int

MENDEKLARASIKAN CLASS GENERIC 20 21 22 23 24 25 26 27 public Integer method(int input) { Integer data 1 = new Integer(input); Basic. Generic <Integer> basic. Generic = new Basic. Generic <Integer>(data 1); Integer data 2 = basic. Generic. get. Data(); return data 2; } // berkelanjutan. . .

MENDEKLARASIKAN CLASS GENERIC public static void main(String args[]) { Gen. Sample sample = new

MENDEKLARASIKAN CLASS GENERIC public static void main(String args[]) { Gen. Sample sample = new Gen. Sample(); System. out. println(sample. method( “Beberapa data generic")); System. out. println(sample. method(1234)); } 20 21 22 23 24 25 26 }

MENDEKLARASIKAN CLASS GENERIC � Mendeklarasikan class Basic. Generic : class Basic. Generic<A> � Berisi

MENDEKLARASIKAN CLASS GENERIC � Mendeklarasikan class Basic. Generic : class Basic. Generic<A> � Berisi parameter tipe: <A> � Mengindikasikan bahwa class telah mendeklarasikan class generic � Class tidak bekerja dengan beberapa tipe acuan khusus � Mendeklarasikan field: private A data; � data field merupakan tipe generic, bergantung pada tipe data dimana objek Basic. Generic didesain

MENDEKLARASIKAN CLASS GENERIC � Mendeklarasikan instance dari class � Harus menetapkan tipe acuan �

MENDEKLARASIKAN CLASS GENERIC � Mendeklarasikan instance dari class � Harus menetapkan tipe acuan � Contoh: Basic. Generic<String> basic. Generic = new Basic. Generic<String>(da ta 1); � Class bekerja dengan variabel-variabel dari tipe String Basic. Generic<Integer> basic. Generic = new Basic. Generic<Integer>(d

MENDEKLARASIKAN CLASS GENERIC � Mendeklarasikan method get. Data : public A get. Data() {

MENDEKLARASIKAN CLASS GENERIC � Mendeklarasikan method get. Data : public A get. Data() { return data; } � Kembali pada nilai tipe A, sebuah tipe generic � Method akan memiliki sebuah tipe data runtime � Setelah Anda mendeklarasikan sebuah object dari tipe Basic. Generic, A terikat pada suatu tipe data khusus

MENDEKLARASIKAN CLASS GENERIC � Instance dari class Basic. Generic<String> basic. Generic = new Basic.

MENDEKLARASIKAN CLASS GENERIC � Instance dari class Basic. Generic<String> basic. Generic = new Basic. Generic<String>(data 1); String data 2 = basic. Generic. get. Data(); � basic. Generic terikat pada tipe String � Tidak memerlukan typecast Basic. Generic<Integer> basic. Generic = new Basic. Generic<Integer>(data 1); Integer data 2 = basic. Generic. get. Data(); � basic. Generic terikat pada tipe Integer � Tidak memerlukan typecast

GENERIC : BATASAN "PRIMITIVE" � Tipe generic Java terbatas pada tipe acuan dan tidak

GENERIC : BATASAN "PRIMITIVE" � Tipe generic Java terbatas pada tipe acuan dan tidak akan bekerja dengan tipe data primitive � Contoh: Basic. Generic<int> basic. Generic = new Basic. Generic<int>(data 1); � Pemecahan: � Bungkus/wrap tipe primitive terlebih dahulu � Dapat menggunakan tipe wrapper (pembungkus) sebagai argumen pada tipe generic

MENGKOMPILASI GENERIC � Untuk mengkompilasi, menggunakan JDK (v. 1. 5. 0): javac -version -source

MENGKOMPILASI GENERIC � Untuk mengkompilasi, menggunakan JDK (v. 1. 5. 0): javac -version -source "1. 5" -sourcepath src -d classes src/Swap. Class. java dimana � src mengacu pada lokasi dimana source code java berada � class mengacu pada lokasi dimana file class akan dikirim � Contoh: javac -version -source "1. 5" sourcepath c: temp -d c: temp c: /temp/My. File. java

GENERIC YANG DIBATASI � Contoh terdahulu: � Parameter tipe dari class Basic. Generic dapat

GENERIC YANG DIBATASI � Contoh terdahulu: � Parameter tipe dari class Basic. Generic dapat berupa beberapa tipe data acuan � Diperbolehkan untuk membatasi instantiasi tipe potensial dari sebuah class generic � Dapat membatasi pengesetan argumen tipe yang memungkinkan untuk subtipe dari tipe bound (ikatan) yang diberikan

GENERIC YANG DIBATASI � Membatasi instantiasi tipe dari class � Menggunakan keyword extends pada

GENERIC YANG DIBATASI � Membatasi instantiasi tipe dari class � Menggunakan keyword extends pada parameter tipe class Class. Name <Parameter. Name extends Parent. Class> � Contoh: class Scroll. Pane generic Template untuk sebuah Container biasa yang didekorasi dengan kemampuan scrolling � Tipe Runtime instance class ini sering kali merupakan subclass dari Container � Tipe umum atau statis adalah Container �

GENERIC YANG DIBATASI 1 2 3 4 5 6 7 8 9 10 11

GENERIC YANG DIBATASI 1 2 3 4 5 6 7 8 9 10 11 12 class Scroll. Pane<My. Pane extends Container> {. . . } class Test. Scroll. Pane { public static void main(String args[]) { Scroll. Pane<Panel> scroll. Pane 1 = new Scroll. Pane<Panel>(); // statement berikutnya illegal/tidak sah Scroll. Pane<Button> scroll. Pane 2 = new Scroll. Pane<Button>(); } }

GENERIC YANG DIBATASI � Memeriksa tipe statis yang ditambahkan � Menjamin bahwa setiap instantiasi

GENERIC YANG DIBATASI � Memeriksa tipe statis yang ditambahkan � Menjamin bahwa setiap instantiasi tipe generic bertahan pada batas yang ditugaskan � Dapat memanggil beberapa method yang ditemukan pada tipe statis objek secara aman � Tidak terdapat batasan yang jelas pada parameter � Batasan default adalah Objek � Instance tidak dapat me-invoke method yang tidak muncul pada class Objek

MENDEKLARASIKAN METHOD GENERIC � Java juga mengijinkan kita untuk mendeklarasikan method generic � Method

MENDEKLARASIKAN METHOD GENERIC � Java juga mengijinkan kita untuk mendeklarasikan method generic � Method Generic � Method Polymorphic � Method yang diparameterisasi oleh tipe � Mengapa harus method generic? � Ketergantungan tipe antara argumen dan pengembalian nilai tentu saja merupakan generic � Tetapi sifat generic mengubah dari pemanggilan method ke pemanggilan method dibanding dengan informasi tipe class-level

MENDEKLARASIKAN METHOD GENERIC 1 2 3 4 5 6 class Utilities { /* T

MENDEKLARASIKAN METHOD GENERIC 1 2 3 4 5 6 class Utilities { /* T secara implisit merupakan extends Objek */ public static <T> Array. List<T> make(T first) { return new Array. List<T>(first); } }

MENDEKLARASIKAN METHOD GENERIC � Java juga menggunakan sebuah mekanisme tipe-inferensi � Secara otomatis menyimpulkan

MENDEKLARASIKAN METHOD GENERIC � Java juga menggunakan sebuah mekanisme tipe-inferensi � Secara otomatis menyimpulkan tipe-tipe dari method polymorphic berdasarkan pada tipe argumen � Mengurangi kepanjang-lebaran dan kompleksitas dari sebuah invocation method � Untuk membangun sebuah instance baru dari Array. List<Integer>, kita akan hanya memerlukan statemen berikut: Utilities. make(Integer(0));

RINGKASAN � Mengapa harus Generic? � Mendeklarasikan Generic sebuah Class class Class. Name<Type. Parameter>

RINGKASAN � Mengapa harus Generic? � Mendeklarasikan Generic sebuah Class class Class. Name<Type. Parameter> {. . . } � Pembatasan "Primitive"

RINGKASAN � Generic yang dibatasi (Constrained Generic) class Class. Name<Parameter. Name extends Parent. Class>

RINGKASAN � Generic yang dibatasi (Constrained Generic) class Class. Name<Parameter. Name extends Parent. Class> � Mendeklarasikan sebuah Method Generic � Contoh: public static <T> Array. List<T> make(T first) { return new Array. List<T>(first); }