Mengenal Anonymous Classes pada Bahasa Pemrograman Java

Apa itu ?

Mungkin tanpa kita sadari sering menggunakan teknik ini ketika melakukan penulisan Code di Java. Pada bahasa pemrograman Java kita bisa menuliskan kelas lain di dalam sebuah kelas atau biasa disebut sebagai nested class. Kita bisa menuliskan secara langsung tanpa memberi nama (class NameClass) dan langsung mendeklarasikannya seperti pada contoh di bawah ini. Pembuatan nested class tanpa harus memberi nama ini dikenal dengan anonymous class.

interface Hello {
public String getHelloFormal();
}
class Greeting {
//definisikan anonymous class
Hello helloBahasaIndonesia = new Hello(){
public String getHelloFormal(){
return "Selamat pagi";
}
};
Hello helloSunda = new Hello(){
public String getHelloFormal(){
return "Wilujen Sumping";
}
};
}
view raw Greeting.java hosted with ❤ by GitHub


Bayangkan jika harus menulis satu-satu tiap masing kelas tersebut (HelloSunda, HelloBahasaIndonesia). Apalagi kalau kelas tersebut hanya sekali digunakan, tentu terasa sangat tidak praktis. Selain itu penggunaan anonymous class ini membuat kita menjadi lebih concise (ringkas).

Syntax dan Structure

Dalam structure code di bawah, terdapat Class Engine sebagai outer class, Diesel sebagai interface inner class, V12Engine sebagai inner class. Pada baris code Diesel RBPower2004 = new Diesel() merupakan contoh dari anonymous class. Ketika local class seperti V12Engine adalah bentuk deklarasi, anonymous class yang ditampung pada object RBPower2004 lebih ke bentuk ekspresi, yang artinya kita mendefiniskan class terebut dalam ekspresi yang lain (RBPower2004).

public class Engine {
interface Diesel {
public void showFuelStatus();
}
public void startEngine() {
class V12Engine implements Diesel {
Double fuelPercentage = 50.0;
@Override
public void showFuelStatus(){
System.out.println("V12 engine check fuel ... " + fuelPercentage + " ... ");
}
}
V12Engine BMWEngine = new V12Engine();
BMWEngine.showFuelStatus();
Diesel RBPower2004 = new Diesel() {
Double bioFuel = 40.0;
Double powerElectric = 20.0;
@Override
public void showFuelStatus(){
System.out.println("fuel " + bioFuel + " || power electric " + powerElectric);
}
};
RBPower2004.showFuelStatus();
}
public static void main(String... args) {
Engine engine = new Engine();
engine.startEngine();
}
}
view raw Engine.java hosted with ❤ by GitHub

Seperti pada contoh anonymous class (RBPower2004) tersusun dari hal-hal berikut:

  • Operator new.
  • Nama interface atau class parent. Contohnya bisa dilihat anonymous class mengimplementasi interface Diesel.
  • Parantesis yang mencakup parameter / argumen untuk metode constructor sebuah class. Untuk kasus interface tidak terdapat metode constructor. seperti pada contoh yaitu Diesel RBPower2004 = new Diesel(), Diesel() tidak mengirim apapun ke dalam parantesisnya.
  • Body class, yang mendeklarisakan isi dari class anonyomus tersebut. Pada contoh mulai dari bari 19 sampai 26.
Perlu diingat juga bahwa anonymous class didefinisikan dalam bentuk ekspresi sehingga memerlukan ; (semicolon) diakhir deklarasinya seperti pada contoh baris 27. 

Berdasarkan kepada siapa anonymous berasal, ada 2 tipe yaitu:
  1. Anonymous class yang mengimplemen interface, untuk contoh ini bisa dilihat pada code Engine di atas. 
  2. Anonymous class yang mengextends  (menjelaskan ulang) sebuah class. Contohnya seperti berikut: 
public class Animalia{
class Carnivora {
public void showPrey() {
System.out.println("carnivora eat the meat");
}
}
public void discoverTiger(){
Carnivora tiger = new Carnivora(){
public void showPrey(){
System.out.println("tiger hunt and eat the meat of deer");
}
};
tiger.showPrey();
}
public static void main(String[] args){
Animalia animal = new Animalia();
animal.discoverTiger();
}
}
view raw Animalia.java hosted with ❤ by GitHub

Pada contoh tersebut. object Tiger melakukan penjelasan ulang terhadap class Carnivora tanpa pelu melakukan pendeklarasian sebuah class baru.

Kesimpulan

Dalam bahasa pemrograman Java, anonymous class adalah sebuah fitur yang memudahkan pembuatan class sederhana tanpa perlu mendefinisikan class secara eksplisit. Anonymous class memungkinkan kita untuk membuat instance dari class secara langsung tanpa harus membuat class terlebih dahulu.


Sumber 

Posting Komentar untuk "Mengenal Anonymous Classes pada Bahasa Pemrograman Java"