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