Pada kesempatan kali ini saya akan membahas tentang Java Annotation interface. Salah satu fitur yang mungkin sering kita pakai namun mungkin sebagian dari kita masih ada yang belum paham dengan cara kerjanya.
Salah satu yang mengimplementasikan fitur java annotation interface ini adalah library yang di buat oleh paman Jack yang kita bisa panggil library nya itu ButterKnife, yang biasa kita gunakan untuk menghilangkan findViewById untuk memotong codingan kita supaya lebih sedikit.
Ya begitulah tujuan di buatnya Java Annotation Interface ini yaitu untuk mengenerate code di dalam code yang kita buat, sehingga akan mempercepat kita dalam aktifitas coding kita sehari — hari.
Nah pada kesempatan kali ini saya akan sedikit memberi contoh latihan tentang bagaimana menggunakan Java Annotation untuk membuat view binding seperti ButterKnife secara sederhana. Dan code ini juga mungkin bisa kamu gunakan untuk project mu supaya bisa menggurangi daftar library yang ada pada projectmu, lumayan kan bisa mengurangi code yang tidak diperlukan.
Knife
Project kita kali ini akan kita akan berinama Knife yang artinya pisau. Dimana kita ibaratkan dengan pisau ini kita bisa memotong code sehingga kita bisa membuat kode yang lebih singkat. Namun pada latihan kali ini kita belum menggunakan Annotation Processor seperti yang paman jack buat. Mungkin akan kita bahas pada artikel selanjutnya.
Pada project ini kita akan membuat tiga annotation interface untuk menghadle view binding, view click dan view on long click. Yang mana hal ini yang paling sering kita gunakan untuk berurusan dengan view pada project kita bukan. Akan tetapi kalau teman — teman ingin mencoba explore untuk case yang lain juga boleh.
KnifeView
Interface KnifeClick ini akan kita gunakan untuk menghandle findviewbyid. Berikut ini annotation interfacenya :
@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) public @interface KnifeView { int value(); }
KnifeClick
Interface KnifeClick ini akan kita gunakan untuk menghandle onclick listener. Berikut ini annotation interfacenya :
import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface KnifeClick { int value(); }
KnifeLongClick
Interface KnifeLongClick ini akan kita gunakan untuk menghandle onlongclick listener. Berikut ini annotation interfacenya :
import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface KnifeLongClick { int value(); }
Field — field pada onnotation yang kita buat KnifeView, KnifeClick dan KnifeLongClick fungsinya adalah sebagai berikut :
- RetentionPolicy.RUNTIME = Annotation interface akan di jalankan hanya pada saat runtime atau aplikasi sedang berjalan.
- Target(ElementType.FIELD) = Annotation interface akan di pasangkan pada variable yang ada.
- Target(ElementType.METHOD) = Annotation interface akan di pasangkan pada method yang ada.
- int value = Parameter untuk mendapatkan id dari view yang akan di click.
Knife
Sekarang tiba saat nya untuk kita membuat pisa dimana kita akan menulis code untuk mengconvert field yang di dapat dari annotation prosessor yang telah kita buat untuk menjadi binding view nya.
Berikut ini adalah codenya:
https://gist.github.com/ar-android/d5058f7715c766a55bc7d896934366edPenjelasan
1. bindView
Pada method bindview kita akan melakukan loop terhadap variable fields untuk mendapatkan field yang mengandung annotation KnifeView. Setelah mendapatkan variable yang mengandung Annotation processor maka kita akan mencari view dengan id yang ada pada annotation ( findViewById ) kemudian setelah selesai kita akan mengeset field nya accesible dan memberikan instance view kedalam field yang mengandung annotation KnifeView tadi dimana disini berfungsi seperti Casting dari object view ke object lainya.
2. createOnClick
Pada method createOnClick kita akan melakukan hal yang sama untuk pertamakalinya yaitu melakukan loop pada variable mthods untuk mendapatkan method yang mengandung Annotation Interface KnifeClick. Setelah mendapatnya maka melakukan findview kembali sehingga selanjutnya kita melakukan setOnclickLitener pada view nya, dan di dalam callback click listenernya kita melakukan set accesible terhadap method yang mengandung KnifeClick tadi dan selanjutnya melakukan invoke atau memanggil method dengan memberikan parameter view.
3. createOnLongClick
Pada method createOnClick kita akan melakukan hal yang sama untuk pertamakalinya yaitu melakukan loop pada variable mthods untuk mendapatkan method yang mengandung Annotation Interface KnifeLongClick. Setelah mendapatnya maka melakukan findview kembali sehingga selanjutnya kita melakukan setOnLongClickLitener pada view nya, dan di dalam callback click listenernya kita melakukan set accesible terhadap method yang mengandung KnifeLongClick tadi dan selanjutnya melakukan invoke atau memanggil method dengan memberikan parameter view.
Implementasi
Selanjutnya kita akan menggunakan Java annotation interface yang telah kita buat ke dalam activity kita. Berikut ini contoh penggunaanya:
Kesimpulan
Menggunakan annotation interface ini sangat mudah sekali dan hasilnya bisa mengurangi kita dalam penulisan code yang dengan begitu akan membantu kita mempercepat proses dalam menulis code untuk project kita.
Bagaimana mudah bukan? Kalau kamu merasa tulisan ini bermanfaat jangan lupa untuk share dengan teman — teman ya. Dan janga pula lupa untuk memberikan claps.
Seperti biasa kamu bisa dapatkan source code dari latihan kita kali ini pada laman github saya dibawah ini:
https://github.com/ar-android/Knife.