界面和@interface在java中有什么区别?

自90年代后期在大学使用JBuilder以来,我一直没有碰到过Java,所以我有点失去联系 – 无论如何,本周我一直在做一个小型的Java项目,并使用Intellij IDEA作为我的IDE ,从我的正常.Net发展的步伐变化。

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

public interface Test { } 

 public @interface Test { } 

我已经做了一些search,但找不到有关@interface的大量有用的信息。

@符号表示注释types定义。

这意味着它不是一个真正的接口,而是一个新的注释types – 用作函数修饰符,比如@override

看到这个主题的javadocs条目 。

接口:

一般来说,一个接口公开一个合约而不公开底层的实现细节。 在面向对象编程中,接口定义暴露行为的抽象types,但不包含逻辑。 实现由实现接口的类或types定义。

@interface :(标注types)

以下面的例子,有很多评论:

 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 } 

而不是这个,你可以声明一个注释types

  @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关键字用于声明新的注释types。

有关语法的描述,请参阅注释docs.oracle教程 。
如果您真的想深入了解@interface含义,请参阅JLS 。

interface:为实现它的类定义契约

@interface:定义注释的合约