自从90年代末在大学里使用JBuilder后,我就没有接触过Java,所以我有点不熟悉Java——无论如何,这周我一直在做一个小的Java项目,并使用Intellij IDEA作为我的IDE,以改变我常规的。net开发的节奏。

我注意到它支持添加接口和@interfaces,什么是@interface,它与普通接口有什么不同?

public interface Test {
}

vs.

public @interface Test {
}

我做了一些搜索,但没有找到大量有用的信息引用@interface。


当前回答

接口:为实现该契约的类定义契约

@interface:定义注释的契约

其他回答

接口 在Java编程语言中,是一种抽象类型,用于指定类必须实现的行为。它们类似于协议。接口使用interface关键字声明

@ interface 用于创建您自己的(自定义)Java注释。注释定义在它们自己的文件中,就像Java类或接口一样。下面是自定义Java注释示例:

@interface MyAnnotation {

    String   value();

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

}

这个例子定义了一个名为MyAnnotation的注释,它有四个元素。注意@interface关键字。这向Java编译器发出信号,表明这是一个Java注释定义。

注意,每个元素的定义都类似于接口中的方法定义。它有一个数据类型和一个名称。可以将所有基元数据类型用作元素数据类型。也可以使用数组作为数据类型。不能使用复杂对象作为数据类型。

要使用上面的注释,你可以使用如下代码:

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


}

参考资料- http://tutorials.jenkov.com/java/annotations.html

接口:为实现该契约的类定义契约

@interface:定义注释的契约

接口:

通常,接口公开契约而不公开底层实现细节。在面向对象编程中,接口定义了公开行为的抽象类型,但不包含逻辑。实现由实现接口的类或类型定义。

@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

interface关键字表明您在Java中声明了一个传统的接口类。 @interface关键字用于声明一个新的注释类型。

见文档。关于Oracle注释教程的语法说明。 如果您真的想了解@interface的详细含义,请参阅JLS。

符号@表示注释类型定义。

这意味着它并不是一个真正的接口,而是一种新的注释类型——用作函数修饰符,例如@override。

请参阅此javadocs关于该主题的条目。