Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

@interface - What?

I know what interfaces are, but I don't know enough about java to know how to search for my answer. So what does this mean and do:

public @interface ThreadSafe { }

// different file

@ThreadSafe
public class Model {

What does this line mean/do "@interface"? What does it mean/do when it's applied above "@ThreadSafe"

like image 346
user123321 Avatar asked Oct 14 '11 00:10

user123321


2 Answers

This is called an annotation. You may want to look at the Java tutorial. It has a pretty good explanation of what they are and how they are used.

https://docs.oracle.com/javase/tutorial/java/annotations/index.html

like image 63
Savvas Dalkitsis Avatar answered Sep 24 '22 15:09

Savvas Dalkitsis


Many annotations replace comments in code.

Suppose that a software group traditionally starts the body of every class with comments providing important information:

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
}

To add this same metadata with an annotation, you must first define the annotation type. The syntax for doing this is:

@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();
}

The annotation type definition looks similar to an interface definition where the keyword interface is preceded by the at sign (@) (@ = AT, as in annotation type). Annotation types are a form of interface, which will be covered in a later lesson. For the moment, you do not need to understand interfaces.

The body of the previous annotation definition contains annotation type element declarations, which look a lot like methods. Note that they can define optional default values.

After the annotation type is defined, you can use annotations of that type, with the values filled in, like this:

@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
}

Source: https://docs.oracle.com/javase/tutorial/java/annotations/declaring.html

like image 23
dreinoso Avatar answered Sep 24 '22 15:09

dreinoso