Skip to main content

Java | Retrolambda, Coding dengan Java 8 untuk Java 5, 6, 7

Seperti yang kita ketahui bahwa versi paling akhir untuk saat ini dari Java adalah Java 8.
Pada Java (sebagai bahasa pemrograman) 8 terdapat cukup banyak fitur baru yang memudahkan hidup kita sebagai programmer, terutama untuk mengurangi verbosity/boilerplate dari code yang kita tulis. Fitur-fitur tersebut antara lain adalah lambda expressions, method reference, dan try with resources.

  • Lambda expressions (fitur ini dirilis mulai java 8)

    Sebagai contoh di swing, apabila kita menambahkan actionlistener pada button adalah sebagai berikut

    clickButton.addActionListener(new ActionListener() {
    
        @Override
        public void actionPerformed(ActionEvent event) {
            System.out.println(event);
        }
    });

    terlihat bahwa koding yang kita tulis cukup banyak (verbose), namun dengan lambda expressions kita cukup menuliskan

    clickButton.addActionListener((ActionEvent event) -> {
        System.out.println(event);
    });

    atau bahkan

    clickButton.addActionListener(event -> {
        System.out.println(event);
    });


  • Method reference (fitur ini dirilis mulai java 8)

    Sebenarnya method reference merupakan penyederhaan dari lambda expressions jika anonymous object/method tersebut memanggil method yang sudah ada.

    Dalam contoh kasus clickButton di atas, lambda expressions bisa kita sederhanakan dengan method reference.

    clickButton.addActionListener(System.out::println);

    note: parameter dari method action performed akan dipassing sebagai parameter method
    println
     , ajaib bukan? :)

  • Try with resources (fitur ini dirilis mulai java 7)

    Fitur ini memudahkan kita untuk mengakses resources yang butuh diclose setelah selesai digunakan. eg: read file, data cursor untuk jdbc, etc

    Sebelum Java 7, kita harus menulis koding berikut untuk mengakses file

    String readFirstlineFromFile(String path) throws IOException {
        BufferedReader reader = new BufferedReader(new FileReader(path));
    
        try {
            return reader.readLine();
        } finally {
             if (reader != null) reader.close();
        }
    
    }


    Dengan try with resources kita cukup menulis

    String readFirstlineFromFile(String path) throws IOException {
        try (BufferedReader reader = new BufferedReader(new FileReader(path))) {
            return reader.readLine();
        }
    }

Lalu kenapa kita tidak melakukan migrasi agar aplikasi berjalan di JVM 8 saja?
Bisa jadi kita ingin mengadopsi fitur Java 8 tersebut untuk existing app tapi tidak memungkinkan karena sudah dipakai di banyak customer, yang jika dilakukan migrasi membutuhkan ongkos yang besar.

ataupun untuk programmer Android yang ingin mengadopsi fitur Java 8, namun karena Android belum mendukung Java 8 dan kemungkinan akan butuh waktu sebelum Google merilis dukungan Android untuk Java 8.

Dengan retrolambda kebutuhan ini bisa dipenuhi, karena kita bisa koding dengan Java 8 namun hasilnya bisa dieksekusi dengan versi Java (JVM) di bawahnya. Retrolamba akan memodifikasi bytecode hasil kompilasi Java 8 agar bisa dieksekusi di Java 5, 6, 7.

Sebagai informasi tambahan, saat ini retrolambda baru mendukung 3 fitur tersebut di atas.
Belum ada dukungan untuk Stream API dan beberapa fitur Java 8 lainnya.

Cara untuk integrasi ke existing project sangat mudah, karena retrolambda memiliki plugin untuk maven, gradle, maupun kompilasi manual.

May lambda be with you :D

Comments

Popular posts from this blog

Java | Menambahkan Dialog Konfirmasi Sebelum Keluar dari Aplikasi

Kali ini saya ingin berbagi cara sederhana untuk menampilkan dialog konfirmasi sebelum keluar dari aplikasi. Dengan syarat aplikasi yang kita buat harus menggunakan JFrame sebagai frame utama. Langkah-langkah yang harus kita lakukan adalah sebagai berikut: 1. Ganti property default close operation dari JFrame menjadi DO_NOTHING_ON_CLOSE, value ini dimaksudkan agar ketika button close dari JFrame diklik tidak akan terjadi apa-apa. Sebaliknya jika valuenya adalah EXIT_ON_CLOSE, maka ketika button close dari JFrame diklik maka program akan tertutup. setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); 2. Yang kedua adalah kita harus menambahkan WindowListener pada JFrame. Interface WindowListener memiliki beberapa method terkait event terhadap window (yakni JFrame), namun yang harus kita override hanyalah method windowClosing, method ini akan dipanggil ketika button close diklik.   Sebagai informasi, apabila kita menambahkan WindowListener secara langsung maka semua method dari i

PostgreSQL | Membuat Nomor Urut dengan Window Function ROW_NUMBER()

Pengguna Oracle Database mungkin sudah sangat familiar dengan clausa ROWNUM. Bagi yang belum tahu apa itu ROWNUM,  ROWNUM  adalah  pseudo column  (kolom bayangan) yang berisi nomor urut dari hasil eksekusi query. Sayangnya fitur ini belum tersedia pada PostgreSQL . Namun ada kabar gembira bagi kita pengguna  PostgreSQL , dimana sejak versi 8.4, PostgreSQL telah menyediakan 1 window function  yang mengakomodasi masalah ROWNUM, yakni ROW_NUMBER() . Sesuai dengan dokumentasi yang disediakan, cara menggunakan fungsi ini adalah dengan menggabungkannya dengan clausa OVER  yang didalamnya berisi clausa ORDER BY . Supaya lebih jelas dan lebih mudah dipahami, lebih baik langsung kita praktekkan saja. Saya membuat sebuah table dengan struktur sebagai berikut CREATE TABLE name ( code CHAR(1) ); yang kemudian saya isi kolom code dengan alfabet mulai dari a s/d z  dan angka 0 (nol). Sebelumnya kita lakukan query ke table name tanpa clausa ORDER BY : SELECT code FROM name; Outputny

PostgreSQL | Ekspresi Kondisional CASE Pada Query

Salah satu fitur yang saya sukai dari PostgreSQL adalah dapat digunakannya ekspresi kondisional pada query. PostgreSQL menyediakan ekpresi CASE yang memiliki fungsi yang sama dengan statemen IF/ELSE pada bahasa pemrograman. Berikut adalah bentuk dari ekspresi CASE pada PostgreSQL CASE WHEN condition THEN result      [WHEN ...]      [ELSE result] END Untuk melihat bagaimana cara menggunakan ekspresi CASE, saya memiliki sebuah tabel number dengan sebuah kolom nomor yang memuat data bertipe integer. SELECT nomor FROM number ORDER BY nomor;  nomor -------      1      3     32     37     38     97 (6 rows) Sekarang mari kita gunakan ekspresi CASE untuk menentukan apakah nomor tersebut merupakan bilangan ganjil atau genap. SELECT nomor, (CASE WHEN nomor % 2 = 0 THEN 'Bilangan Genap' ELSE 'Bilangan Ganjil' END) AS status FROM number ORDER BY nomor; dan hasilnya adalah sebagai berikut:  nomor |     status     -------+-----------------      1 | Bilangan