412 Stimmen

Was ist der Unterschied zwischen Interface und @Interface in Java?

Ich habe seit der Verwendung von JBuilder in den späten 90er Jahren, als ich an der Universität war, nichts mehr mit Java zu tun gehabt, bin also etwas aus der Übung - jedenfalls habe ich diese Woche an einem kleinen Java-Projekt gearbeitet und Intellij IDEA als IDE verwendet, um eine Abwechslung zu meiner normalen .Net-Entwicklung zu schaffen.

Ich stelle fest, dass es Unterstützung für das Hinzufügen von Schnittstellen und @Schnittstellen bietet. Was ist eine @Schnittstelle und wie unterscheidet sie sich von einer normalen Schnittstelle?

public interface Test {
}

vs.

public @interface Test {
}

Ich habe ein wenig gesucht, konnte aber nicht viele nützliche Informationen über @interface finden.

408voto

mrkishi Punkte 4517

El @ Symbol kennzeichnet eine Definition des Anmerkungstyps.

Das heißt, es ist ノット wirklich eine Schnittstelle, sondern vielmehr ein neuer Anmerkungstyp, der als Funktionsmodifikator verwendet werden kann, wie z. B. @override .

Siehe dies javadocs-Eintrag zu diesem Thema.

149voto

mavis Punkte 2820

Schnittstelle:

Im Allgemeinen stellt eine Schnittstelle einen Vertrag dar, ohne die zugrunde liegenden Implementierungsdetails offenzulegen. In der objektorientierten Programmierung definieren Schnittstellen abstrakte Typen, die ein Verhalten offenlegen, aber keine Logik enthalten. Die Implementierung wird durch die Klasse oder den Typ definiert, der die Schnittstelle implementiert.

@Schnittstelle : (Beschriftungstyp)

Nehmen Sie das folgende Beispiel, zu dem es viele Kommentare gibt:

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

}

Stattdessen können Sie einen Annotationstyp deklarieren

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

die dann eine Klasse wie folgt annotieren kann:

@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: Viele Annotationen ersetzen Kommentare im Code.

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

38voto

DavidValeri Punkte 2360

El interface Schlüsselwort zeigt an, dass Sie eine traditionelle Schnittstellenklasse in Java deklarieren.
Die @interface Schlüsselwort wird verwendet, um einen neuen Annotationstyp zu deklarieren.

Voir docs.oracle Lernprogramm auf Anmerkungen für eine Beschreibung der Syntax.
Siehe die JLS wenn Sie wirklich in die Einzelheiten gehen wollen, was @interface bedeutet.

24voto

Emmanuel Osimosu Punkte 4882

interface: definiert den Vertrag für eine Klasse, die ihn implementiert

@interface: definiert den Vertrag für eine Bemerkung

15voto

Piyush Singh Punkte 203

Schnittstelle ist in der Programmiersprache Java ein abstrakter Typ, der verwendet wird, um ein Verhalten festzulegen, das Klassen implementieren müssen. Sie sind vergleichbar mit Protokollen. Schnittstellen werden mit dem Schlüsselwort interface deklariert

@Schnittstelle wird verwendet, um eigene (benutzerdefinierte) Java-Anmerkungen zu erstellen. Annotationen werden in einer eigenen Datei definiert, genau wie eine Java-Klasse oder Schnittstelle. Hier ist ein Beispiel für benutzerdefinierte Java-Anmerkungen:

@interface MyAnnotation {

    String   value();

    String   name();
    int      age();
    String[] newNames();

}

In diesem Beispiel wird eine Anmerkung mit dem Namen MyAnnotation definiert, die vier Elemente enthält. Beachten Sie das Schlüsselwort @interface. Dies signalisiert dem Java-Compiler, dass es sich um eine Java-Anmerkungsdefinition handelt.

Beachten Sie, dass jedes Element ähnlich wie eine Methodendefinition in einer Schnittstelle definiert ist. Es hat einen Datentyp und einen Namen. Sie können alle primitiven Datentypen als Elementdatentypen verwenden. Sie können auch Arrays als Datentyp verwenden. Komplexe Objekte können Sie nicht als Datentyp verwenden.

Um die obige Anmerkung zu verwenden, könnten Sie den folgenden Code verwenden:

@MyAnnotation(
    value="123",
    name="Jakob",
    age=37,
    newNames={"Jenkov", "Peterson"}
)
public class MyClass {

}

Referenz - http://tutorials.jenkov.com/java/annotations.html

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X