Javaのインターフェースと@インターフェースの違いは何ですか?


306

私は90年代後半に大学でJBuilderを使用して以来Javaに触れていなかったので、少し連絡が取れなくなっています。 、私の通常の.Net開発からのペースの変更について。

私はそれがインターフェースと@インターフェースの追加をサポートしていることに気付きました、@インターフェースとは何ですか、そしてそれは通常のインターフェースとどう違うのですか?

public interface Test {
}

public @interface Test {
}

少し検索はしましたが、@ interfaceを参照するための有用な情報が見つかりませんでした。

回答:


322

@の記号は注釈型の定義を示しています。

意味することはありません、関数修飾子として使用する、など-実際にインタフェースではなく、新しい注釈型@Override

件名については、このjavadocsエントリを参照してください。


7
知ってよかった。それで、それを@interfaceと呼ぶ根拠は何でしたか、むしろ@annotationと言うのではないかと思います。
Bittercoder、2009年

5
チュートリアルとJLSは、アノテーションが特別な種類のインターフェースであることをほのめかしています。この件に関してはあまり議論されていないようですが、javarunner.blogspot.com / 2005/01 / annotations-in-java-15.htmlは、アノテーションはアノテーションインターフェースと@およびインターフェースの暗黙の拡張であることを説明しています通常のインターフェースと区別するために一緒に使用されます。アノテーションのJSR仕様を読むこともできます。
DavidValeri、2009年

1
@Bittercoderがドキュメントで言及しているように、「キーワードインターフェースの前にはアットマーク(@)を付けます(@ = AT、注釈型のように)」。それが私がwrtネーミングを見つけることができるすべての根拠です。
Shaishav 2017

112

インターフェース:

一般に、インターフェイスは、基礎となる実装の詳細を公開せずにコントラクトを公開します。オブジェクト指向プログラミングでは、インターフェイスは動作を公開する抽象型を定義しますが、ロジックは含みません。実装は、インターフェースを実装するクラスまたはタイプによって定義されます。

@interface:(注釈タイプ)

たくさんのコメントがある以下の例を見てください:

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

}

これの代わりに、アノテーション型を宣言できます

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

次に、次のようにクラスに注釈を付けることができます。

@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: 多くの注釈は、コード内のコメントを置き換えます。

リファレンス:http : //docs.oracle.com/javase/tutorial/java/annotations/declaring.html


11
いい説明
Pat B 14年

2
それは実際に役に立ちました。Javaがこれを実行できることを知りませんでした。
Jay Sidri

以前の回答には、この情報の出所であるこのリンクが含まれていました。このトピックに関する詳細情報を見つけると便利です。 docs.oracle.com/javase/tutorial/java/annotations/declaring.html
PatS

1
私がスタックオーバーフローで目撃している最良の完全な答えの1つ(まだ明確です)。
D氏

32

interfaceキーワードは、Javaでの伝統的なインターフェース・クラスを宣言していることを示しています。キーワードは、新たな注釈型を宣言するために使用されます。
@interface

構文の説明については、注釈に関するdocs.oracleチュートリアルを参照してください。意味の詳細を知りたい場合
は、JLSを参照してください@interface



8

Javaプログラミング言語のインターフェースは、クラスが実装する必要のある動作を指定するために使用される抽象型です。それらはプロトコルに似ています。インターフェイスは、interfaceキーワードを使用して宣言されます

@interface を使用して、独自の(カスタム)Java注釈を作成します。アノテーションは、Javaクラスまたはインターフェースと同様に、独自のファイルで定義されます。カスタムJavaアノテーションの例を次に示します。

@interface MyAnnotation {

    String   value();

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

}

この例では、4つの要素を持つMyAnnotationというアノテーションを定義しています。@interfaceキーワードに注意してください。これは、これがJavaアノテーション定義であることをJavaコンパイラに通知します。

各要素は、インターフェースのメソッド定義と同様に定義されていることに注意してください。データ型と名前があります。すべてのプリミティブデータ型を要素データ型として使用できます。データ型として配列を使用することもできます。複合オブジェクトをデータ型として使用することはできません。

上記のアノテーションを使用するには、次のようなコードを使用できます。

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


}

リファレンス-http://tutorials.jenkov.com/java/annotations.html

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.