web-dev-qa-db-ja.com

javaのinterfaceと@interfaceの違いは何ですか?

大学にいる間、90年代後半にJBuilderを使用して以来Javaに触れていないので、少し触れていません-とにかく小さなJavaに取り組んでいます_今週のプロジェクトで、Intellij IDEAをIDEとして使用して、通常の.Net開発からのペースを変更します。

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

public interface Test {
}

vs.

public @interface Test {
}

私は少し検索しましたが、@ interfaceを参照する有用な情報を見つけることができませんでした。

266
Bittercoder

@記号は、注釈タイプの定義を示します。

つまり、notは実際にはインターフェースであり、むしろ新しい注釈タイプ-@などの関数修飾子として使用されるオーバーライド

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

290
mrkishi

インタフェース:

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

@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

95
mavis

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

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

31
DavidValeri

interface:は、それを実装するクラスのコントラクトを定義します

@interface:は注釈のコントラクトを定義します

15
eosimosu

interfaceJavaプログラミング言語の抽象型は、クラスが実装する必要がある動作を指定するために使用されます。プロトコルに似ています。インターフェイスは、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

4
Piyush Singh