Pengembangan Aplikasi Mobile
Dalam bab ini, kita akan mendiskusikan karateristik dari perangkat mobile, dan bagaimana hal
tersebut mempengaruhi pengembangan program untuk perangkat ini. Kita akan diperkenalkan
kepada Java 2 Mobile Edition (J2ME), termasuk pentingnya configuration dan profilenya.
Pada akhir bab ini, pelajar diharapkan dapat menguasai :
● Mengidentifikasi karakteristik dari perangkat mobile
● Menjelaskan arsitektur J2ME
● Mengetahui peran atau aturan configuration dan profile
● Mengidentifikasi API yang disediakan oleh MIDP
● Menjelaskan daur hidup MIDlet
1.2 Perangkat Mobile
Perangkat mobile memiliki banyak jenis dalam hal ukuran, desain dan layout, tetapi mereka
memiliki kesamaan karakteristik yang sangat berbeda dari sistem desktop.
● Ukuran yang kecil
Perangkat mobile memiliki ukuran yang kecil. Konsumen menginginkan perangkat yang
terkecil untuk kenyamanan dan mobilitas mereka.
● Memory yang terbatas
Perangkat mobile juga memiliki memory yang kecil, yaitu primary (RAM) dan secondary
(disk). Pembatasan ini adalah salah satu faktor yang mempengaruhi penulisan program
untuk berbagai jenis dari perangkat ini. Dengan pembatasan jumlah dari memory,
pertimbangan-pertimbangan khusus harus diambil untuk memelihara pemakaian dari
sumber daya yang mahal ini.
● Daya proses yang terbatas
Sistem mobile tidaklah setangguh rekan mereka yaitu desktop. Ukuran, teknologi dan
biaya adalah beberapa faktor yang mempengaruhi status dari sumber daya ini. Seperti
harddisk dan RAM, Anda dapat menemukan mereka dalam ukuran yang pas dengan
sebuah kemasan kecil.
● Mengkonsumsi daya yang rendah
Pengembangan Perangkat Mobile 1
Perangkat mobile menghabiskan sedikit daya dibandingkan dengan mesin desktop.
Perangkat ini harus menghemat daya karena mereka berjalan pada keadaan dimana
daya yang disediakan dibatasi oleh baterai-baterai.
● Kuat dan dapat diandalkan
Karena perangkat mobile selalu dibawa kemana saja, mereka harus cukup kuat untuk
menghadapi benturan-benturan, gerakan, dan sesekali tetesan-tetesan air.
● Konektivitas yang terbatas
Perangkat mobile memiliki bandwith rendah, beberapa dari mereka bahkan tidak
tersambung. Kebanyakan dari mereka menggunakan koneksi wireless.
● Masa hidup yang pendek
Perangkat-perangkat konsumen ini menyala dalam hitungan detik kebanyakan dari
mereka selalu menyala. Coba ambil kasus sebuah handphone, mereka booting dalam
hitungan detik dan kebanyakan orang tidak mematikan handphone mereka bahkan
ketika malam hari. PDA akan menyala jika anda menekan tombol power mereka.
1.3 Gambaran J2ME
1.3.1 Platform JAVA
Java dibuat pada tahun 1991 oleh James Gosling. Pada awalnya diberi nama Oak, dimana
untuk menghormati pohon yang ada di luar jendela Gosling. Kemudian namanya diubah ke
Java karena telah ada sebuah bahasa yang diberi nama Oak.
Motivasi sesungguhnya dari Java adalah kebutuhan akan sebuah bahasa yang bisa digunakan
pada berbagai platform yang bisa dimasukkan ke dalam berbagai produk elektronik seperti
pemanggang roti dan lemari es. Salah satu dari proyek pertama yang dikembangkan
menggunakan JAVA sebuah remote kontrol yang diberi nama Star 7.
Pada saat yang sama, World Wide Web dan Internet berkembang sangat cepat. Gosling
menyadari bahwa Java dapat digunakan untuk pemrograman Internet.
Dengan keluarnya versi 1.2, platform Java telah dipilah-pilah menjadi beberapa edisi :
The Standard Edition(J2SE), Enterprise Edition(J2EE), Mobile Edition(J2ME), dan JavaCard API.
J2SE – Java 2 Platform, Standard Edition Aplikasi Desktop
J2EE – Java 2 Platform, Enterprise Edition Aplikasi enterprise dengan fokus pada
pengembangan sisi webserver, termasuk
servlet,JSP,EJB, dan XML
J2ME – Java 2 Platform, Micro Edition Perangkat Mobile
JavaCard Smart Cards
Pengembangan Perangkat Mobile 2
Gambar 1: Platform Java
1.3.2 Gambaran J2ME
J2ME adalah satu set spesifikasi dan teknologi yang fokus kepada perangkat konsumen.
Perangkat ini memiliki jumlah memori yang terbatas, menghabiskan sedikit daya dari baterei,
layar yang kecil dan bandwith jaringan yang rendah.
Dengan perkembangbiakan perangkat mobile konsumer dari telepon, PDA, kotak permainan ke
peralatan-peralatan rumah, Java menyediakan suatu lingkungan yang portable untuk
mengembangkan dan menjalankan aplikasi pada perangkat ini.
Program J2ME, seperti semua program JAVA adalah diterjemahkan oleh VM. Program-program
tersebut dikompile ke dalam bytecode dan diterjemahkan denga Java Virtual Machine(JVM).Ini
berarti bahwa program-program tersebut tidak berhubungan langsung dengan perangkat.
J2ME menyediakan suatu interface yang sesuai dengan perangkat. Aplikasi-aplikasi tersebut
tidak harus dikompile ulang supaya mampu dijalankan pada mesin yang berbeda.
Inti dari J2ME terletak pada configuration dan profile-profile. Suatu configuration
menggambarkan lingkungan runtime dasar dari suatu sistem J2ME. Ia menggambarkan core
library, virtual machine, fitur keamanan dan jaringan.
Pengembangan Perangkat Mobile 3
ServersServers
Java 2 Micro Edition (J2ME)
Desktop
machines
High-end
consumer
devices Low-end
consumer
devices
Smart
CardsJ2EE
J2SE
CDC
Foundation Profile
Personal Profile
CLDC
MIDP
Optional
Packages
Optional
Packages
Java
Card
Java Virtual Machine KVM Card VM
Gambar 2: Arsitektur J2ME
Sebuah profile memberikan library tambahan untuk suatu kelas tertentu pada sebuah
perangkat. profile-profile menyediakan user interface(UI) API,persistence, messaging library,
dan sebagainya.
Satu set library tambahan atau package tambahan menyediakan kemampuan program
tambahan. Pemasukan package ini ke dalam perangkat J2ME dapat berubah-ubah karena
tergantung pada kemampuan sebuah perangkat. Sebagai contoh, beberapa perangkat MIDP
tidak memiliki Bluetooth built-in, sehingga Bluetooth API tidak disediakan dalam perangkat ini.
1.3.3 Configuration
Suatu configuration menggambarkan fitur minimal dari lingkungan lengkap Java runtime.
Untuk menjamin kemampuan portabilitas dan interoperabilitas optimal diantara berbagai
macam perangkat yang dibatasi sumber dayanya(memory, prosesor, koneksi yang dibatasi),
configuration tidak menggambarkan fitur tambahan. Suatu configuration J2ME
menggambarkan suatu komplemen yang minimum dari teknologi JAVA. Adalah merupakan
tugas profile-profile untuk menggambarkan tambahan library untuk suatu kategori perangkat
tertentu.
configuration menggambarkan:
● Subset bahasa pemrograman JAVA
● Kemampuan Java Virtual Machine(JVM)
● Core platform libraries
● Fitur sekuriti dan jaringan
Pengembangan Perangkat Mobile 4
Applications
Profile OptionalPackages
OEM
APIs
Configuration {
Device Operating System
Libraries
Java Virtual Machine
1.3.4 Profile
Suatu profile menggambarkan set-set tambahan dari API dan fitur untuk pasar tertentu,
kategori perangkat atau industri. Sementara configuration menggambarkan library dasar,
profile-profile menggambarkan library yang penting untuk membuat aplikasi-aplikasi efektif.
Library ini memasukkan user interface, jaringan dan penyimpanan API.
1.4 CLDC
The Connected Limited Device Configuration (CLDC) menggambarkan dan menunjuk pada area
berikut ini:
● Fitur Bahasa Java dan Virtual Machine(VM)
● Library dasar(java.lang.*,java.util.*)
● Input/Output(java.io.*)
● Kemanan
● Jaringan
● Internationalization
1.4.1 Fitur yang hilang
Fitur tertentu dari J2SE yang dipindahkan dari CLDC adalah :
● Finalization of class instances
● Asynchronous exceptions
● Beberapa error classes
● User-defined class loaders
● Reflection
● Java Native Interface (JNI)
● Thread groups dan daemon threads
Reflection, Java Native Interface (JNI) dan user-defined class loaders potensial menjadi lubang
keamanan. JNI juga membutuhkan memory yang intensif sehingga dimungkinkan untuk tidak
mendapat dukungan dari memory rendah sebuah perangkat mobile.
1.4.2 Karakteristik perangkat CLDC
Perangkat yang diincar oleh CLDC mempunyai karateristik sebagai berikut:
● Memory minimal 192kb untuk platform Java.
● Prosesor dengan 16 atau 32 bit.
Pengembangan Perangkat Mobile 5
● Mengkonsumsi sedikit daya.
● Terbatas, koneksi jaringan yang sementara dengan pembatasan bandwith(biasanya
wireless).
CLDC tidak menggambarkan instalasi dan daur hidup sebuah aplikasi, antarmuka(UI) dan
penanganan peristiwa(event handling). Adalah merupakan tugas profile yang berada di bawah
CLDC untuk menggambarkan area ini. Secara khusus, spesifikasi MIDP menggambarkan daur
hidup aplikasi MIDP (MIDlet), library UI dan event handling(javax.microedition.lcdui.*).
1.4.3 Verifikasi Class
Spesifikasi CLDC memerlukan semua class untuk melewati proses verifikasi dua tingkat.
Verifikasi pertama dilaksanakan diluar perangkat sebelum instalasi pada perangkat. Verifikasi
kedua terjadi pada perangkat selama runtime dan dilaksanakan oleh KVM.
Gambar 3: Proses Verifikasi dua tingkat
Pengembangan Perangkat Mobile 6
compile (javac)
preverify
verify
(runtime)
interpret
File.java
File.class
File.class
Development Machine Target Device
Install
1.4.4 Generic Connection Framework
The Generic Connection Framework menyediakan API dasar untuk koneksi dalam CLDC.
Framework ini menyediakan suatu pondasi umum untuk koneksi seperti HTTP, Socket, dan
Datagrams.GCF menyediakan suatu set API yang umum dan biasa yang memisahkan semua
jenis koneksi. Perlu dicatat bahwa tidak semua jenis koneksi dibutuhkan untuk diterapkan oleh
perangkat MIDP.
Hirarki interface yang dapat diperluas dari GFC membuat proses penyamarataan menjadi
mungkin. Jenis koneksi baru mungkin bisa ditambahkan ke dalam framework ini dengan
memperluas hirarki ini.
Gambar 4: Hirarki koneksi GCF
1.5 CDC
Connected Device Configuration (CDC) adalah super set dari CLDC. CDC menyediakan
lingkungan Java runtime yang lebih luas dibandingkan CLDC dan lebih dekat kepada
lingkungan J2SE.
Pengembangan Perangkat Mobile 7
StreamConnectionNotifier
Connection
DatagramConnection
InputConnection OutputConnection
StreamConnection
ContentConnection
CDC Java Virtual Machine (CVM) mendukung penuh Java Virtual Machine (JVM). CDC berisi
semua API dari CLDC. CDC menyediakan suatu subset yang lebih besar dari semua class
J2SE.
Seperti CLDC, CDC tidak menggambarkan setiap class UI. Library UI digambarkan oleh profile-
profile di bawah configuration ini.
Semua class yang terdapat dalam CDC datang dari package ini:
● java.io
● java.lang
● java.lang.ref
● java.lang.math
● java.net
● java.security
● java.security.cert
● java.text
● java.util
● java.util.jar
● java.util.zip
CDC juga memasukkan di dalamnya GCF. CDC memerlukan jenis koneksi tambahan seperti file
dan dukungan datagram.
1.6 JTWI
The Java Technology for the Wireless Industry (JTWI) menetapkan satu set jasa dan spesifikasi
standar. Berdasar spesifikasi JTWI, kata kuncinya adalah “untuk memperkecil fragmentasi API
di dalam pasar telepon mobile, dan untuk mengirim spesifikasi yang dapat
diprediksi,spesifikasi yang jelas untuk perangkat pabrik, operator, dan pengembang aplikasi”.
Dengan penyesuaian kepada JTWI, banyak aplikasi akan berjalan di suatu set yang lebih luas
pada perangkat. Perangkat pabrik juga akan beruntung karena sebuah aplikasi yang besar
akan tersedia untuk perangkat mereka.
Pengembangan Perangkat Mobile 8
Gambar 5: Komponen JTWI
1.7 MIDP
The Mobile Information Device Profile (MIDP) berada di atas dari CLDC. Anda tidak bisa
menulis aplikasi mobile hanya dengan menggunakan CLDC API. Anda harus tetap
memanfaatkan MIDP yang mendefinisikan UI.
Spesifikasi MIDP, kebanyakan seperti CLDC dan API lainnya sudah digambarkan melalui Java
Community Process (JCP). JCP melibatkan sebuah kelompok ahli berasal dari lebih dari 50
perusahaan, yang terdiri atas pabrik perangkat mobile, pengembang software. MIDP terus
berkembang, dengan versi-versi masa depan yang telah lulus dari proses ketat JCP.
Spesifikasi MIDP menggambarkan suatu perangkat MID yang memiliki karakteristik-
karateristik ini sebagai batas minimum:
• Tampilan:
• Ukuran Layar: 96x54
• kedalaman tampilan: 1-bit
• Ketajaman pixel: sekitar 1:1
• Masukan:
• Satu atau lebih mekanisme user-input: satu keybboard, dua keyboard, atau
touch screen
• Memory:
• 256 kilobytes of non-volatile memory untuk implementasi MIDP.
• 8 kilobytes of non-volatile memory for application-created persistent data
• 128 kilobytes of volatile memory for the Java runtime (e.g., the Java heap)
• Jaringan:
• dua jalur, wireless, bandwidth terbatas
• Sound:
• Kemampuan untuk memainkan nada-nada
Pengembangan Perangkat Mobile 9
MIDlets
MIDP 2.0 OptionalPackages
OEM
APIs
CLDC 1.0 or 1.1
WMA
1.1
MMAPI
1.1
Device Operating System
MIDP menggambarkan model aplikasi, UI API, penyimpanan dan jaringan yang kuat,
permainan dan media API, kebijakan keamanan, penyebaran aplikasi dan ketetapan over-the-
air.
1.8 MIDlet
Suatu aplikasi MIDP disebut MIDlet. Perangkat application management software (AMS)
berinteraksi langsung dengan MIDlet dengan method MIDlet create, start, pause, dan destroy.
MIDlet adalah bagian dari package javax.microedition.midlet. Sebuah MIDlet harus di-extend
dengan class MIDlet. Dan dapat meminta parameter dari AMS seperti dirumuskan dalam
application descriptor (JAD).
Suatu MIDlet tidak harus memiliki (dan memang harus tidak mempunyai) sebuah method
public static void main(String[] argv).Method tersebut tidak akan dikenal lagi oleh AMS
sebagai titik awal sebuah program.
1.8.1 Siklus MIDlet
kehidupan MIDlet dimulai ketika di-instantiate oleh AMS. MIDlet pada awalnya masuk status
“Pause” setelah perintah baru dibuat. AMS memanggil constructor public tanpa argumen dari
MIDlet. Jika sebuah exception terjadi dalam constructor, MIDlet memasuki status “Destroyed”
dan membuangnya segera.
MIDlet masuk ke dalam status “Active” atas pemanggilan method startUp() oleh AMS.
MIDlet masuk ke dalam status “Destroyed” ketika AMS memanggil method destroyApp().
Status ini juga kembali diakses ketika method notifyDestroyed() kembali dengan sukses
kepada aplikasi. Dengan catatan bahwa MIDlet hanya bisa memasuki status “Destroyed”
sekali dalam masa hidupnya.
Pengembangan Perangkat Mobile 10
Gambar 6: Daur hidup MIDlet
1.8.2 MIDlet suites
Aplikasi-aplikasi MIDlet dibungkus dan dikirim kedalam perangkat sebagai MIDlet suites.
Sebuah MIDlet suite terdiri dari Java Archive (JAR) dan sebuah tambahan Java Application
Descriptor (JAD).
File JAD adalah suatu file teks yang berisi satu set atribut-atribut, beberapa dibutuhkan.
Pengenalan Generics
Release Java terbaru menyediakan langkah terbesar dalam pemrograman Java
dibandingkan dengan versi-versi lain sebelumnya. Ini terdiri atas ekstensi yang cukup
signifikan terhadap source language syntax. Bagian yang paling terlihat yaitu
penambahan generic types.
Modul ini mengenalkan Anda konsep dasar mengenai Java generic types.
Setelah melengkapi pembahasan ini, anda harus dapat :
1. Mengapresiasikan keuntungan dari generic types
2. Mendeklarasikan class generic
3. Menggunakan constrained generics
4. Mendeklarasikan method generic
13.2 Mengapa Generics?
Satu dari penyebab adanya bugs yang paling signifikan dalam Bahasa pemrograman
Java adalah keperluan akan pernyataan typecast atau downcast untuk lebih
mengkhususkan tipe data dari tipe staticnya secara terus-menerus. Sebagai contoh,
Sebuah object arraylist memungkinkan kita untuk menambahkan beberapa referensi tipe
object pada list tapi ketika kita mendapatkan kembali elemet ini , kita perlu untuk
typecast object ke tipe referensi khusus yang sesuai dengan keperluan kita. Downcasting
adalah hotspot yang potensial untuk ClassCastException. Yang juga membuat kode kita
menjadi lebih panjang, jadi, menjadi lebih sedikit dapat terbaca. Lebih dari itu,
downcasting juga efektif merusak manfaat dari sebuah kekuatan bahasa yang diketikkan
sejak dia menghapuskan keamanan yang disediakan perusahaan berupa pemeriksaan
tipe(type checking).
Tujuan utama dari penambahan generics pada Java adalah untuk memecahkan masalah
ini. tipe Generic memungkinkan subuah single class untuk bekerja dengan pilihan tipe
yang beraneka ragam. Ini adalah jalan yang alami untuk mengeliminasi keperluan untuk
pemilihan (casting).
Mari pertama-tama mempertimbangkan sebuah object ArrayList dan lihat bagaimana
type generic akan membantu dalam peningkatan kode kita. Seperti yang sudah Anda
ketahui, sebuah object arraylist memiliki kemampuan untuk menyimpan elemen-elemen
dari beberapa tipe referensi untuk list ini. Sebuah instance arraylist, bagaimanapun,
selalu memaksa kita untuk men-downcast object-object kita membantu mendapatkan
kembali dari list. Pertimbangkan pernyataan berikut :
String myString = (String) myArrayList.get(0);
Versi generic dari class ArrayList didesain untuk bekerja secara asli dengan beberapa
tipe class. Sama seperti, dia juga mempertahankan manfaat dari pengecekan tipe (type
Pengenalan Pemrograman 2 1
checking). Kita dapat melanjutkannya dengan keperluan memiliki typecast elemen yang
kita dapatkan dari list dan memiliki pernyataan berikut terhadap pernyataan sebelumnya
:
String myString = myArrayList.get(0);
Walaupun downcasting sudah terhapus, ini bukan berarti bahwa Anda dapat menandai
segala sesuatu sebagai return value dari method get dan melanjutkannya dengan
typecasting semuanya. Jika Anda menandai sesuatu yang lain disamping sebuah String
untuk output dari method get, Anda akan menghadapi sebuah waktu mengcompile type
tidak sesuai seperti pesan berikut ini :
found: java.lang.String
required: java.lang.Integer
Integer data = myArrayList.get(0);
Untuk Anda agar hanya memiliki ide bagaimana type-type generic digunakan sebelum
materi ini digali lebih dalam, pertimbangkan potongan kode berikut ini :
ArrayList <String> genArrList = new ArrayList <String>();
genArrList.add("A generic string");
String myString = genArrList.get(0);
JoptionPane.showMessageDialog(this, myString);
Amatilah melalui pernyataan, anda mungkin mengamati kata <String> segera terlihat
setelah referensi tipe data arraylist. Anda dapat menerjemahkan pernyataan pertama
sebagai instantiasi sebuah versi generic dari class ArrayList dan versi generic ini terdiri
dari object-object dari tipe String. genArrList adalah batas dari tipe String. Oleh sebab
itu, mengikat sebuah Integer atau beberapa tipe lain bukan String untuk hasil dari get
function akan menjadi illegal. Pernyataan berikut ini adalah illegal.
int myInt = genArrList.get();
13.3 Mendeklarasikan sebuah Class Generic
Untuk menjalankan potongan code sebelumnya, kita harus sudah mendefinisikan versi
generic dari class ArrayList. Untungnya, versi java terbaru sudah menyediakan user
dengan versi generic dari semua class-class Java Collection. Pada sesi ini, Anda akan
mempelajari bagaimana untuk mendeklarasikan class generic anda sendiri.
Dripada berdiskusi lebihpanjang lagi tentang bagaimana untuk mendeklarasikan sebuah
class generic , anda akan diberikan sebuah contoh sederhana tentang class generic
untuk dipelajari bentuknya.
class BasicGeneric <A> {
private A data;
public BasicGeneric(A data) {
this.data = data;
}
public A getData() {
return data;
}
}
Pengenalan Pemrograman 2 2
public class GenSample {
public String method(String input) {
String data1 = input;
BasicGeneric <String> basicGeneric = new
BasicGeneric <String>(data1);
String data2 = basicGeneric.getData();
return data2;
}
public Integer method(int input) {
Integer data1 = new Integer(input);
BasicGeneric <Integer> basicGeneric = new
BasicGeneric <Integer>(data1);
Integer data2 = basicGeneric.getData();
return data2;
}
public static void main(String args[]) {
GenSample sample = new GenSample();
System.out.println(sample.method("Some generic data"));
System.out.println(sample.method(1234));
}
}
Sekarang mari kita melalui bagian dari kode yang menggunakan syntax untuk type
generic.
Untuk deklarasi dari class BasicGeneric,
class BasicGeneric <A>
nama class diikuti oleh sepasang kurung yang didalamnya terdapat huruf kapital A:
<A>. Ini disebut dengan sebuah parameter tipe. Penggunaan kurung ini
mengindikasikan bahwa class yang dideklarasikan adalah class generic. Ini berarti bahwa
class tidak bekerja dengan beberapa type referensi khusus.
kemudian, amati bahwa sebuah field dari class dideklarasikan menjadi tipe A
private A data;
Deklarasi ini mengelompokkan bahwa field data adalah dari tipe generic, tergantung
pada tipe data yang telah didesain untuk bekerja dengan object BasicGeneric.
Ketika mendeklarasikan sebuah instance dari class, anda harus mengelompokkan tipe
referensi dengan yang mana yang anda inginkan untuk bekerja sama.
BasicGeneric <String> basicGeneric = new
BasicGeneric <String>(data1);
Syntax <String> setelah mendeklarasi BasicGeneric mengelompokkan bahwa instance
dari class ini akan bekerja dengan variabel-variabel bertipe String.
Anda juga dapat bekerja denga variabel-variabel bertipe Integer atau referensi tipe yang
lain. Untuk bekrja dengan Integer, potongan kode memiliki pernyataan berikut ini :
BasicGeneric <Integer> basicGeneric = new
BasicGeneric <Integer>(data1);
Pengenalan Pemrograman 2 3
Anda mungkin dapat menerjemahkan sisa dari kode dengan pemahaman anda sendiri.
Mempertimbangkan deklarasi dari method getData .
public A getData() {
return data;
}
Method getData mengembalikan sebuah nilai dari tipe A, Sebuah Tipe type. Ini bukan
berarti bahwa method tidak akan memiliki tipe data runtime, atau even pada waktu
meng-compile. Setelah Anda mendeklarasikan sebuah object yang bertipe BasicGeneric,
A adalah pengikat ke sebuah tipe data yang spesifik. Instance ini akan berlaku sebagai
jika ini dideklarasikan untuk memiliki tipe data spesifik ini dan tipe ini hanya dari bagian
sangat awal.
Pada kode yang diberikan, dua instances dari class BasicGeneric terbentuk.
BasicGeneric <String> basicGeneric = new
BasicGeneric <String>(data1);
String data2 = basicGeneric.getData();
BasicGeneric <Integer> basicGeneric = new
BasicGeneric <Integer>(data1);
Integer data2 = basicGeneric.getData();
Perlu diperhatikan perhatian bahwa instantiasi dari class generic adalah hanya sama
dengan instantiasi sebuah class normal kecuali bahwa tipe data khusus berada dalam
<> menggantikan nama konstruktor. Informasi tambahan ini mengindikasikan tipe dari
data anda akan bekerja dengan siapa untuk bagian instance ini dari class
BasicGeneric.Setelah instantiasi, anda dapat mengakses anggota dari class melalui
instance sekarang. Tidak ada yang lebih diperlukan untuk typecast nilai pengembalian
dari method getData sejak diputuskan bahwa ini akan bekerja dengan sebuah referensi
tipe data yang spesifik.
13.3.1 Pembatasan"Primitive"
Sebuah pembatasan type generic dalam Java adalah mereka dibatasi oleh tipe referensi
dan tidak akan bekerja dengan tipe data primitive.
Sebagai contoh, pernyataan berikut akan menjadi illegal sejak int adalah sebuah tipe
data primitive.
BasicGeneric <int> basicGeneric = new
BasicGeneric <int>(data1);
Petama-tama Anda akan menyelesaikan type primitive sebelum menggunakan mereka
sebagai arguments ke sebuah type generic.
13.3.2 Meng-compilasi Generics
Untuk meng-compile source codes Java denagn type generic menggunakan JDK (v.
1.5.0), gunakan syntax berikut ini :
Pengenalan Pemrograman 2 4
javac -version -source "1.5" -sourcepath src -d classes
src/SwapClass.java
Dimana src mengarah pada lokasi dari source code java sementara class mengarah pada
lokasi dimana file class akan disimpan.
Beriut ini sebuah contoh :
javac -version -source "1.5" -sourcepath c:\temp -d c:\temp
c:/temp/SwapClass.java
13.4 Constrained Generics
Dalam contoh yang diberikan terdahulu, type parameter dari class BasicGeneric dapat
memiliki beberapa referensi tipe data. Ada beberapa kasus, bagaimanapun, dimana anda
ingin untuk membatasi tipe instantiasi yang potensial dari class generic. Java juga
memungkinkan kita untuk membatasi set argument type yang mungkin untuk subtypes
dari sebuah batas type yang diberikan.
Sebagai contoh, kita mungkin ingin untuk mendefinisikan sebuah class generic
ScrollPane yang merupakan sebuah template untuk sebuah Container asli yang telah
dilengkapi dengan fungsi scrolling. Tipe runtime dari sebuah instance dari class ini akan
sering menjadi sebuah subclass dari Container, tapi tipe static atau general adalah
Container yang lebih sederhana.
Untuk membatasi instantiasi tipe dari sebuah class, kita menggunakan kata kunci
extends diikuti oleh class yang membatasi tipe generic sebagai bagian dari tipe
parameter.
Contoh berikut ini membatasi instantiasi tipe dari class ScrollPane ke subtipe dari class
Container.
class ScrollPane <MyPane extends Container> {
...
}
class TestScrollPane {
public static void main(String args[]) {
ScrollPane <Panel> scrollPane1 = new
ScrollPane <Panel>();
// pernyataan berikutnya adalah illegal
ScrollPane <Button> scrollPane2 = new
ScrollPane <Button>();
}
}
Instantiasi dari scrollPane1 bernilai valid sejak Panel menjadi sebuah subclass dari class
Container sedangkan kreasi dari scrollPane2 akan menyebabkan munculnya compile
time error sejak Button bukan merupakan sebuah subclass dari Container.
menggunakan generic constrained yang dapat memberikan kita penambahan
pengecekan tipe static. Sebagai sebuah hasil, kita akan menjamin bahwa setiap
Pengenalan Pemrograman 2 5
instantiasi dari tipe generic yang melekat pada batas yang kita miliki.
Sejak kita yakin bahwa setiap tipe instantiasi adalah sebuah subclass dari batas yang
dimiliki, kita dapat memanggil beberapa method secara aman yang ditemukan dalam
objek static tipe. Jika kita belum menempatkan beberapa batas eksplisit pada
parameternya, default batas adalah Object. Ini berarti bahwa kita tidak dapat
menjalankan method pada sebuah instance dari batas yang tidak ditampilkan dalam
class Object.
13.5 Mendeklarasikan sebuah Method Generic
Disamping mendeklarasikan sebuah class generic, Java juga memberi kita perlakuan
khusus untuk mendeklarasikan sebuah method generic. ini disebut dengan method
polymorphic, yang mana didefinisikan menjadi method yang diberi nilai parameter
berupa tipe.
method parameterisasi sangat membantu kita kita ingin untuk menampilkan tugas
dimana ketergantungan tipe antara argument dan nilai pengembalian aslinya merupakan
generic, tapi generic sebenarnya tidak mempercayakan pada beberapa tipe level class
informasi dan akan merubah dari method call ke method call.
Sebagai contoh, Andaikata kita menginginkan untuk menambahkan sebuah method
make untuk sebuah class ArrayList. Method static ini akan diambil dalam sebuah
argument tunggal, yang mana akan menjadi satu-satunya elemen dari object ArrayList.
Untuk membuat generic ArrayList kita, sebagai penampung beberapa tipe elemen,
argumen tunggal dalam method make harus memiliki sebuah tipe generic sebagai
sebuah argumen dan sebagai sebuah tipe nilai kembalian.
Untuk mendeklarasikan tipe generic pada level method, pertimbangkan contoh berikut
ini :
class Utilities {
/* T secara implisit extends terhadap Object */
public static <T> ArrayList<T> make(T first) {
return new ArrayList<T>(first);
}
}
Java juga menggunakan sebuah mekanisme type-inference untuk secara otomatis
menyimpulkan tipe method polymorphic berdasarkan pada tipe-tipe argumennya. Ini
mengurangi panjang dan kompleksitas dari sebuah alur untuk menjalankan suatu
method.
Untuk membangun sebuah instance baru dari ArrayList<Integer>, kita mempunyai cara
yang cukup sederhana yaitu pernyataan berikut :
Utilities.make(Integer(0));
Pengenalan Pemrograman 2 6