2009-05-27 100 views
187

自从90年代末在大学使用JBuilder以来,我还没有碰过Java,所以我有点失去联系 - 无论如何,本周我一直在研究一个小型Java项目,并使用Intellij IDEA作为我的IDE,以改变我的常规.Net开发的步伐。java中的interface和@interface有什么区别?

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

public interface Test { 
} 

public @interface Test { 
} 

我已经做了一些搜索,但没有找到有用的信息指@interface很大。

回答

198

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

这意味着它是不是真的的界面,而是一个新的注释类型 - 用作功能调节器,如@override

关于这个问题,看看这个javadocs entry

+5

十分感谢,好知道。那么称它为@interface的理由是什么,而不是@annotation我想知道..似乎是一个不必要的重载术语。 – Bittercoder 2009-05-27 23:46:00

+4

本教程和JLS暗示注解是一种特殊的界面。关于这个主题似乎没有太多讨论,但http://javarunner.blogspot.com/2005/01/annotations-in-java-15.html解释说明注释是Annotation接口的隐式扩展和@和界面用于共同区分常规界面。您可能还想阅读JSR规范的注释。 – DavidValeri 2009-05-28 11:41:32

25

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

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

67

接口:

一般而言,接口暴露而不暴露下面的实施细节的合同。在面向对象编程中,接口定义暴露行为的抽象类型,但不包含逻辑。实现由实现接口的类或类型定义。

@interface:(Annotation类型)

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

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

5

interface:定义合同一类,它实现它

@interface:定义了合同的注释