Annotation - Informatika Unsyiah

advertisement
Annotation
Prepared by Viska Mutiawani
1
[email protected]
Subtopik Annotation
What is annotation?
Kegunaan annotation.
Cara membuat annotation.
Cara menggunakan annotation type.
3 jenis annotation.
Predefined annotation type.
Meta-Annotation.
Nested annotation.








2
[email protected]
Intro
Pada Java rilis 5.0, terjadi banyak penambahan
pada bahasa Java. Salah satu penambahan tersebut
adalah annotation.
Annotation dalam bentuk yang paling sederhana:
@Entity
Simbol at (@) akan memberitahu compiler bahwa
yang mengikuti setelah tanda tersebut adalah
annotation.


3
[email protected]
What is annotation?
Annotation merupakan informasi data tentang kode
program tetapi tidak akan berdampak secara
langsung pada kode.
Juga dikenal sebagai meta tag.


4
[email protected]
Kegunaan Annotation
Memberikan informasi kepada compiler.


Annotation dapat digunakan oleh compiler untuk
mendeteksi error atau supress warning.
Compiler-time dan deployment-time processing



5
Software tools dapat memproses informasi dari
annotation untuk menghasilkan code, file XML,dll
Memudahkan perubahan
[email protected]
Kegunaan Annotation (2)
Runtime processing


Beberapa annotation akan diperiksa pada waktu runtime.
Mengurangi waktu untuk me-maintain “side files”
yang harus up-to-date seiring perubahan code pada
file source.

6
[email protected]
Bagaimana digunakannya?
Annotation digunakan untuk mempengaruhi cara
program diperlakukan oleh tool dan library.
Annotation digunakan oleh tool untuk menghasilkan
derived files.




7
Tools: compiler, IDE, runtime tools
Derived files: Java code yang baru, deployment
descriptor, file class
[email protected]
Cara membuat annotation
Anggaplah ada coding pada grup pembangunan
software seperti berikut:

public class Generation3List extends Generation2List
{
// Author: John Doe
// Date: 3/17/2002
// Current revision: 6
// Last modified: 4/12/2004
// By: Jane Doe
// Reviewers: Alice, Bill, Cindy
// class code goes here
}
8
[email protected]
Cara membuat annotation (2)
Annotation type mirip seperti interface pada Java,
namun ada beberapa hal khusus pada annotation
yaitu:






9
Ada simbol @ yang mendahului katakunci interface
Setiap method mendeklarasikan satu unsur pada
annotation type
Deklarasi method tidak boleh ada parameter juga
katakunci throws
Tipe data terbatas pada tipe primitif, String, Class, enums,
annotations dan array dari tipe data sebelumnya
Method boleh memiliki nilai default
[email protected]
Cara membuat annotation (3)

Untuk mempermudah, komentar mengenai data
pembuat dapat dibuat menjadi metadata dengan
menggunakan annotation type.
Contoh:

@interface ClassPreamble {
String author();
String date();
int currentRevision() default 1;
String lastModified() default "N/A";
String lastModifiedBy() default "N/A";
// Note use of array
String[] reviewers();
}
10
[email protected]
Cara menggunakan annotation type


Sesudah annotation type dibuat, anda dapat bebas
menggunakannya sesuai keperluan seperti pada
class, method, deklarasi variabel.
Annotation merupakan modifier khusus yang dapat
digunakan dimanapun sebagaimana modifier lainnya
(ex: public, static, final)


11
Namun sebaiknya annotation mendahului modifier lain
Annotation dimulai dari simbol @ diikuti oleh annotation
type dan semua elemen di dalamnya dalam kurung ( )
[email protected]
Cara menggunakan annotation type (2)
 Contoh:
@ClassPreamble (
author = "John Doe",
date = "3/17/2002",
currentRevision = 6,
lastModified = "4/12/2004",
lastModifiedBy = "Jane Doe",
// Note array notation
reviewers = {"Alice", "Bob", "Cindy"}
)
public class Generation3List extends Generation2List
{
// class code goes here
}
12
[email protected]
3 jenis annotation

Ada 3 jenis annotation:



13
Marker annotation
Single value annotation
Normal annotation
[email protected]
Marker annotation

Merupakan annotation type tanpa elemen

Annotation paling sederhana
 Deklarasi:
/**
* Indicates that the specification of the annotated
* API element is preliminary and subject to change.
*/
public @interface Preliminary { }
 Cara pakai (tidak perlu kurung):
@Preliminary
public class TimeTravel { ... }
14
[email protected]
Single value annotation

Merupakan annotation type yang hanya memiliki satu elemen.


Elemennya harus diberi nama “value”
Deklarasi:
/**
* Associates a copyright notice with the annotated API
element.
*/
public @interface Copyright {
String value();
}

Cara pakai (nama elemen dapat dihilangkan dan tidak perlu
simbol =):
@Copyright("2002 Yoyodyne Propulsion Systems")
public class SomeClass { ... }
15
[email protected]
Normal annotation

Merupakan annotation dengan lebih dari 1 elemen.
Deklarasi:

public @interface RequestForEnhancement {
int id();
String synopsis();
String engineer() default "[unassigned]";
String date(); default "[unimplemented]";
}

Cara pakai:
@RequestForEnhancement(
id = 2868724,
synopsis = "Enable time-travel",
engineer = "Mr. Peabody",
date = "4/1/3007"
)
public static void travelThroughTime(Date
destination) { ... }
16
[email protected]
Predefined Annotation Type

Beberapa annotation yang digunakan oleh Java
compiler (ada dalam java.lang):





17
@Deprecated
@Override
@SuppressWarnings
@SafeVarargs
@FunctionalInterface
[email protected]
@Deprecated


Digunakan untuk menandai bahwa elemen yang ditandai
sebaiknya tidak digunakan lagi.
List pada Java api:
http://docs.oracle.com/javase/7/docs/api/deprecated-list.html

Contoh:
// Javadoc comment follows
/**
* @deprecated
* explanation of why it was deprecated
*/
@Deprecated
static void deprecatedMethod() { }
18
[email protected]
@Override



Digunakan untuk menandai bahwa method yang ditandai
merupakan method yang di-override (ditimpa) dari
superclass atau interface.
Jika tersilap, maka compiler memberi pesan error.
Contoh:
// mark method as a superclass
// method that has been overridden
@Override
int overriddenMethod() { }
19
[email protected]
@SupressWarnings





Digunakan untuk tidak memunculkan pesan peringatan.
Peringatan (warning) ada 2 jenis: deprecation dan unchecked.
Warning dapat muncul pada penggunaan generics.
Misal jika menggunakan method yang deprecated, maka
annotation ini dipakai untuk menghilangkan pesan peringatan.
Contoh:
// use a deprecated method and tell
// compiler not to generate a warning
@SuppressWarnings("deprecation")
void useDeprecatedMethod() {
objectOne.deprecatedMethod();
//deprecation warning – suppressed
}
20
[email protected]
Meta-annotation


Merupakan annotation yang digunakan oleh
annotation lain.
Beberapa yang ada dalam java.lang.annotation:





21
@Retention
@Documented
@Target
@Inherited
@Repeatable
[email protected]
@Retention


Annotation @Retention menspesifikkan bagaimana annotation
yang ditandakan disimpan.
Ada 3 jenis policy:



22
RetentionPolicy.SOURCE - Annotation yang ditandakan hanya
ditahan (retain) di dalam level source saja dan akan di-ignore oleh
compiler. Jadi rentention ini hanya ada dalam source code dan
tidak terekod di dalam file .class (file hasil kompilasi)
RetentionPolicy.CLASS - Annotation yang ditandakan ditahan oleh
compiler pada masa kompilasi, tapi akan di-ignore oleh Java
Virtual Machine (JVM). Retention ini merupakan nilai default jika
tidak dispesifikkan secara khusus. Retention ini akan masuk
dalam file .class (file hasil kompilasi) tapi tidak digunakan oleh
JVM.
RetentionPolicy.RUNTIME - Annotation yang ditandakan ditahan
oleh JVM jadi ia dapat digunakan semasa runtime. Retention ini
ada dalam file .class (file hasil kompilasi) dan digunakan semasa
runtime oleh JVM.
[email protected]
@Documented

Secara default, annotation tidak akan didokumentasi oleh
Javadoc. Namun jika kita menggunakan annotation
@Documented, maka annotation yang kita buat akan
terdokumentasi oleh Javadoc.
Contoh:

// import this to use @Documented
import java.lang.annotation.*;
@Documented
@interface ClassPreamble {
String author();
String date();
int currentRevision() default 1;
String lastModified() default "N/A";
String lastModifiedBy() default "N/A";
// Note use of array
String[] reviewers();
}
23
[email protected]
@Target


Annotation @Target memberi batasan annotation yang
kita buat berlaku untuk elemen Java yang mana.
Ada 8 jenis nilai untuk Target:








24
ElementType.ANNOTATION_TYPE - targetnya annotation type
ElementType.CONSTRUCTOR - targetnya constructor
ElementType.FIELD - targetnya field atau property
ElementType.LOCAL_VARIABLE - targetnya local variable
ElementType.METHOD - targetnya level method
ElementType.PACKAGE - targetnya deklarasi package
ElementType.PARAMETER - targetnya parameter pada
method
ElementType.TYPE - targetnya semua elemen pada class
[email protected]
Contoh penggunaan meta-annotation

Deklarasi:
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.CLASS)
public @interface Accessor {
String variableName();
String variableType() default "String";
}

Cara pakai:
@Accessor(variableName = "name")
public String myVariable;
25
[email protected]
Nested annotation
 Deklarasi:
public @interface Reviewer {
Name my_name();
//Name value();
}
public @interface Name {
String first();
String last();
}

Cara pakai:
@Reviewer(my_name = @Name(first = "James", last =
"Gosling"))
public class ComplexAnnotation {
public static void main(String[] args) {
// TODO code application logic here
}
}
26
[email protected]
Download