自从90年代末在大学里使用JBuilder后,我就没有接触过Java,所以我有点不熟悉Java——无论如何,这周我一直在做一个小的Java项目,并使用Intellij IDEA作为我的IDE,以改变我常规的。net开发的节奏。
我注意到它支持添加接口和@interfaces,什么是@interface,它与普通接口有什么不同?
public interface Test {
}
vs.
public @interface Test {
}
我做了一些搜索,但没有找到大量有用的信息引用@interface。
使用@interface定义注释,使用interface定义接口。
来自Oracle文档:“注释并不直接影响程序语义,但它们确实会影响工具和库处理程序的方式,这反过来又会影响正在运行的程序的语义。注释可以从源文件、类文件或在运行时反射地读取。”
Annotations usually have 2 major uses: They help to define programming contracts (like @Nonnull annotation), which means they actually do nothing, but serve to programmers and IDES to detect potential error codes, and there are runtime annotations, which are usually used by frameworks for configuration (like the @Service annotation in spring): The core detects clases in yous scope with specific annotations and applies logic to them (any example you can think of, like defining Java Servlers, creating singletons, etc)
一般来说,初级程序员在做一些正常的基础工作时,很少需要定义注解,但是接口的定义和使用是任何新开发人员都应该学习的基本知识,如果他们的能力允许的话:好的实践通常建议在代码中使用接口以提高可维护性。
就我个人经验而言,我几乎从学习Java的那一天起就开始定义和使用Java接口,但直到我专业使用Java的5 -6年,我才需要定义一个注释(用现有的注释标记东西是另一回事),而且这是一个非常具体的项目,一个代码自动生成器,有点像Lombok,但对客户来说更具体。
我想这取决于您的工作性质,但是到目前为止,我已经数不清我定义了多少个接口,但是注释可以用双手的手指来数。我相信Java开发人员很有可能在开始和结束他们的整个职业生涯时都不需要定义一个接口(除非您使用swagger基于注释的文档生成xD)
使用@interface定义注释,使用interface定义接口。
来自Oracle文档:“注释并不直接影响程序语义,但它们确实会影响工具和库处理程序的方式,这反过来又会影响正在运行的程序的语义。注释可以从源文件、类文件或在运行时反射地读取。”
Annotations usually have 2 major uses: They help to define programming contracts (like @Nonnull annotation), which means they actually do nothing, but serve to programmers and IDES to detect potential error codes, and there are runtime annotations, which are usually used by frameworks for configuration (like the @Service annotation in spring): The core detects clases in yous scope with specific annotations and applies logic to them (any example you can think of, like defining Java Servlers, creating singletons, etc)
一般来说,初级程序员在做一些正常的基础工作时,很少需要定义注解,但是接口的定义和使用是任何新开发人员都应该学习的基本知识,如果他们的能力允许的话:好的实践通常建议在代码中使用接口以提高可维护性。
就我个人经验而言,我几乎从学习Java的那一天起就开始定义和使用Java接口,但直到我专业使用Java的5 -6年,我才需要定义一个注释(用现有的注释标记东西是另一回事),而且这是一个非常具体的项目,一个代码自动生成器,有点像Lombok,但对客户来说更具体。
我想这取决于您的工作性质,但是到目前为止,我已经数不清我定义了多少个接口,但是注释可以用双手的手指来数。我相信Java开发人员很有可能在开始和结束他们的整个职业生涯时都不需要定义一个接口(除非您使用swagger基于注释的文档生成xD)
接口:
通常,接口公开契约而不公开底层实现细节。在面向对象编程中,接口定义了公开行为的抽象类型,但不包含逻辑。实现由实现接口的类或类型定义。
@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