Java教程
  • Introduction
  • Getting Started
    • The Java Technology Phenomenon
      • About the Java Technology
      • What Can Java Technology Do?
      • How Will Java Technology Change My Life?
    • The Hello World Application
    • A Closer Look at the Hello World Application
  • Learning the Java Language
    • Object-Oriented Programming Concepts
      • What Is an Object?
      • What Is a Class?
      • What Is Inheritance?
      • What Is an Interface?
      • What Is a package?
    • Language Basics
      • Java Language Keywords
    • Annotations
      • Annotations Basics
      • Declaring an Annotation Type
      • Predefined Annotation Types
      • Repeating Annotations
      • Type Annotations and Pluggable Type Systems
    • Generics
      • Why Use Generics?
      • Generic Types
        • Raw Types
      • Generic Methods
      • Bounded Type Parameters
        • Generic Methods and Bounded Type Parameters
      • Generics, Inheritance, and Subtypes
      • Type Inference
      • Wildcards
        • Upper Bounded Wildcards
        • Unbounded Wildcards
        • Lower Bounded Wildcards
        • Wildcards and Subtyping
        • Wildcard Capture and Helper Methods
        • Guidelines for Wildcard Use
      • Type Erasure
        • Erasure of Generic Types
        • Erasure of Generic Methods
        • Effects of Type Erasure and Bridge Methods
        • Non-Reifiable Types
      • Restrictions on Generics
Powered by GitBook
On this page
  • The Format of an Annotation
  • Where Annotations Can Be Used

Was this helpful?

  1. Learning the Java Language
  2. Annotations

Annotations Basics

The Format of an Annotation

最简单的注解如下所示:

@Entity

at符号(@)告诉编译器接下来是一个注解。下面的例子中,注解的名字是Override:

@Override
void mySuperMethod() { ... }

注解可以包含elements(元素),元素可以named或者unnamed,这些元素可以被赋值:

@Author(
   name = "Benjamin Franklin",
   date = "3/27/2003"
)
class MyClass() { ... }

@SuppressWarnings(value = "unchecked")
void myMethod() { ... }

如果只有一个名为value的元素,那么可以省略元素名,像这样:

@SuppressWarnings("unchecked")
void myMethod() { ... }

如果注解不包含元素,那么括号可以省略,就像上面提到的@Override。

可以在同一个声明中使用多个注解:

@Author(name = "Jane Doe")
@EBook
class MyClass { ... }

如果多个注解类型是一样的,则被称为重复注解(repeating annotation):

@Author(name = "Jane Doe")
@Author(name = "John Smith")
class MyClass { ... }

Java SE 8 release提供对重复注解的支持,后面的章节中会提到。

注解的类型可以是Java SE API的java.lang or java.lang.annotation包中定义的类型中其中的一个,比如前面提到的Override和SuppressWarnings。当然你可以定义自己的注解类型,比如前面提到的Author和Ebook就是自定义注解。

Where Annotations Can Be Used

可以在声明中使用注解:声明类,字段,函数,或者别的程序元素。在声明场景下时候时,默认约定每个声明都独占一行。

Java SE 8 release中注解可以应用为the use of types(没找到好的翻译),比如下面的例子:

  • Class instance creation expression:

      new @Interned MyObject();
  • Type cast:

      myString = (@NonNull String) str;
  • implements clause:

      class UnmodifiableList<T> implements
          @Readonly List<@Readonly T> { ... }
  • Thrown exception declaration:

      void monitorTemperature() throws
          @Critical TemperatureException { ... }

这种类型的注解被称为type annotation,后面的章节将会提到。

PreviousAnnotationsNextDeclaring an Annotation Type

Last updated 5 years ago

Was this helpful?