Senin, 28 Mei 2012

Memeriksa tipe data objek menggunakan operator instanceof (Java)

Memeriksa tipe data objek menggunakan operator instanceof (Java)

Pada bentuk polymorph, suatu variabel referensi dari base class dapat menerima referensi dari objek derivative class secara langsung tanpa melalui type-casting. Type-casting adalah merubah suatu tipe data ke tipe data yang lain. Type-casting pada suatu objek dapat dilakukan selama kedua objek tersebut masih berada pada hirarki turunan kelas yang sama (inheritance). Contoh:
public class Mobil {
  public void nyalakanMesin() {}
  public static void main(String[] args) {
    Object obj = new Mobil();
  }
}
Hal ini karena kelas Object dalam pemrograman Java merupakan kelas paling dasar dari semua kelas yang ada dan semua kelas langsung atau tidak langsung diturunkan dari kelas ini. Oleh karenanya kelas Mobil merupakan turunan dari kelas Objek. Sehingga secara logika obyek mobil adalah suatu objek. Sehingga penulisan kode program seperti di atas diperbolehkan.

Sekarang misalnya obyek yang direferensi oleh variabel obj yakni objek dari kelas Mobil ingin dikembalikan lagi ke bentuk objek aslinya, maka diperlukan type-casting secara eksplisit. Hal ini karena tidak semua objek adalah mobil dan mobil hanya salah satu objek dari objek lainnya. Sehingga penulisannya menjadi:
  Mobil mobil = (Mobil)obj;
Suatu objek tidak hanya mobil saja, bisa saja motor, orang, pohon, dan lainnya. Sehingga diperlukan pemeriksaan tipe data objeknya untuk mencegah kesalahan pada saat melakukan type-casting. Untuk memeriksa kondisi tipe datanya, dapat digunakan operator instanceof yang akan bernilai true jika suatu objek merupakan tipe suatu kelas tertentu. Jika suatu objek bukan tipe data suatu kelas tertentu, maka nilai operator instanceof bernilai false. Contoh:
if (obj instance of Mobil) {
  Mobil mobil = (Mobil)obj;
  mobil.nyalakanMesin();
}
Jika misalnya saja tanpa pemeriksaan terlebih dahulu menggunakan operator instanceof dan ternyata variabel obj tidak mereferensi objek dari kelas Mobil, maka statemen di atas akan menyebabkan kesalahan. Contoh:
Object obj = new Orang();
Mobil mobil = (Mobil)obj; // error di sini
mobil.nyalakanMesin();
Kesalahan terjadi karena variabel obj mereferensi objek dari kelas Orang, sedangkan pada proses type-casting, objek yang direferensi oleh variabel obj diubah (cast) ke bentuk tipe data kelas Mobil.

Tidak ada komentar:

Posting Komentar