2009-05-27 11 views
187

Nie dotykałem Javy od czasu użycia JBuildera w późnych latach 90., gdy byłem na uniwersytecie, więc jestem trochę nie na miejscu - w każdym razie pracowałem nad małym projektem Java w tym tygodniu i używając Intellij IDEA as moje IDE, aby zmienić tempo z mojego regularnego rozwoju .Net.Jaka jest różnica między interfejsem a interfejsem @ w java?

Zauważam, że ma wsparcie dla dodawania interfejsów i @ interfejsów, co to jest @interfejs i jak różni się od normalnego interfejsu?

public interface Test { 
} 

vs.

public @interface Test { 
} 

Zrobiłem trochę poszukiwań, ale nie mógł znaleźć wiele użytecznych informacji odnoszących się do @interface.

Odpowiedz

198

Symbol @ oznacza definicję typu adnotacji.

to znaczy, że nie jest naprawdę interfejs, ale raczej nowy typ adnotacji - do stosowania jako modyfikator funkcji, takich jak @Override.

Zobacz ten javadocs entry na ten temat.

+5

Wielkie dzięki, dobrze wiedzieć. Więc to, co było uzasadnieniem dla nazwania go @interface, a raczej powiedzmy, że to jest @annotation, wydaje mi się niepotrzebnie przeładowanym terminem. – Bittercoder

+4

Samouczek i JLS wskazują na adnotację będącą specjalnym rodzajem interfejsu. Wydaje się, że nie ma tam zbyt wielu dyskusji na ten temat, ale http://javarunner.blogspot.com/2005/01/annotations-in-java-15.html wyjaśnia, że ​​adnotacje są niejawnym rozszerzeniem interfejsu Adnotacji i @ i interfejs są używane do rozróżnienia ze zwykłym interfejsem. Możesz również przeczytać specyfikację JSR dla adnotacji. – DavidValeri

+0

@Bittercoder do dokumentów wspomina: "interfejs słowa kluczowego jest poprzedzony znakiem" at "(@) (@ = AT, jak w typie adnotacji)". To wszystko uzasadnienie, które mogę znaleźć w.r.t. nazywanie. – Shaishav

25

Słowo kluczowe wskazuje, że deklarujesz tradycyjną klasę interfejsu w Javie.
Słowo kluczowe @interface służy do deklarowania nowego typu adnotacji.

Zobacz adnotacje opisujące składnię, patrz: docs.oracle tutorial.
Zobacz, jeśli naprawdę chcesz poznać szczegóły, co oznacza .

67

interfejs:

Generalnie interfejs naraża umowę bez narażania leżące szczegóły implementacji. W programowaniu obiektowym interfejsy definiują typy abstrakcyjne, które odsłaniają zachowanie, ale nie zawierają żadnej logiki. Implementacja jest definiowana przez klasę lub typ implementujący interfejs.

@interface: (typ Adnotacja)

Take poniższy przykład, który ma wiele komentarzy:

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 

} 

Zamiast tego, można zadeklarować typ adnotacji

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

, która może następnie opisać klasę w następujący sposób:

@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 

} 

PS: Wiele adnotacji zastępuje komentarze w kodzie.

referencyjny: http://docs.oracle.com/javase/tutorial/java/annotations/declaring.html

+5

ładne wyjaśnienie –

+1

To było naprawdę przydatne. Nie wiedziałem, że Java może to zrobić. –

+0

To powinna być zaakceptowana odpowiedź. – instinct

5

interface: definiuje umowę na klasy, która implementuje on

@interface: definiuje umowę adnotacją

Powiązane problemy