繁体   English   中英

java中的interface和@interface有什么区别?

[英]What's the difference between interface and @interface in java?

I haven't touched Java since using JBuilder in the late 90's while at University, so I'm a little out of touch - at any rate I've been working on a small Java project this week, and using Intellij IDEA as my IDE ,以改变我的常规.Net开发速度。

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

public interface Test {
}

对比

public @interface Test {
}

我进行了一些搜索,但找不到大量有关@interface 的有用信息。

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

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

请参阅此主题的javadocs条目

接口:

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

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

有关语法的说明,请参阅注释的docs.oracle教程
如果您真的想了解@interface含义细节,请参阅JLS

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 定义接口。

注解通常有 2 个主要用途:它们有助于定义编程协定(如 @Nonnull 注解),这意味着它们实际上什么都不做,但服务于程序员和 IDES 以检测潜在的错误代码,还有运行时注解,通常由配置框架(如 spring 中的 @Service 注释):核心检测 scope 中带有特定注释的类并将逻辑应用于它们(您可以想到的任何示例,例如定义 Java Servlers,创建单例等)

一般来说,初级程序员做一些普通的基本工作,很少需要定义注释,但是接口的定义和使用是任何新开发人员应该学习的基本知识,如果他们的语言允许的话:良好实践通常建议在你的可维护性的代码。

以我个人的经验,几乎从我学习 Java 的那一天起,我就一直在定义和使用 Java 接口,但我不需要定义注释(用现有注释标记事物是另一回事)直到我的第 5-6 年专业工作使用 Java,这是一个非常具体的项目,一个代码自动生成器,类似于 Lombok,但对客户来说更具体。

我想这取决于你的工作性质,但时至今日,我已经数不清我定义了多少个接口,但用双手的手指就能数出注解。 我敢打赌,Java 开发人员很有可能在不定义单个接口的情况下开始和结束他们的整个职业生涯(除非您使用 swagger 基于注释的文档生成 xD)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM