2021-04-18 11:02  阅读(62)
文章分类:Java 基础教程 文章标签:JavaJava 教程
©  原文作者:w3cschool 原文地址:https://www.w3cschool.cn/java/java-class-instance.html

Java面向对象设计 - Java注释用法

注释元素的提供值必须是编译时常量表达式,我们不能使用null作为注释中任何类型元素的值。

原始类型

注释类型中的元素的数据类型可以是任何基本数据类型:byte,short,int,long,float,double,boolean和char。

Version注释类型声明两个元素,major和minor,并且都是int数据类型。

以下代码声明了注释类型:

    public @interface MyAnnotation {
      byte a();
    
      short b();
    
      int c();
    
      long d();
    
      float e();
    
      double f();
    
      boolean g();
    
      char h();
    }
    
    @MyAnnotation(a=1, b=2,  c=3,  d=4,  e=12.34F, f=1.89, g=true, h="Y")
    

我们可以使用编译时常量表达式来指定注释元素的值。

以下两个版本注释实例有效:

    @Version(major=2+1, minor=(int)13.2)
    @Version(major=3, minor=13)
    

String类型

我们可以在注释类型中使用String类型的元素。

以下代码定义了名为Name的注释类型。它有两个元素,first和last,它们是String类型。

    public @interface Name  { 
       String first(); 
       String last();
    }
    
    @Name(first="Tom", last="Smith")
    public class NameTest {
        @Name(first="Jack", last="Iaan")
        public void  aMethod()   {
        }
    }
    

在String类型的元素的值表达式中使用字符串连接运算符+是有效的。

    @Name(first="Ja" + "ck", last="Ia" + "an")
    

Class类型

以下代码显示如何使用类类型作为注释值。

    import java.io.IOException;
    
    @interface MyAnnotation {
      Class<? extends Throwable> willThrow() default java.lang.Throwable.class;
    }
    
    public class Main {
      @MyAnnotation(willThrow = IOException.class)
      public static void testCase1() {
        // Code goes here
      }
    
      @MyAnnotation()
      public static void testCase2() {
      }
    }
    

枚举类型

注释可以具有枚举类型的元素。

    enum Level {
      PENDING, FAILED, PASSED;
    }
    
    @interface Review {
      Level status() default Level.PENDING;
    
      String comments() default "";
    }
    
    @Review(status = Level.PASSED)
    public class Main {
    
    }
    

注释类型

我们可以使用注释类型作为另一个注释类型的声明内的元素的类型。

要为注释类型的元素提供值,请使用用于创建注释类型实例的语法。

    @interface Name {
      String first();
    
      String last();
    }
    
    @interface Version {
      int major();
    
      int minor() default 0; // zero as default value for minor
    }
    
    @interface Description {
      Name name();
    
      Version version();
    
      String comments() default "";
    }
    
    @Description(name = @Name(first = "Tom", last = "Smith"), version = @Version(major = 1, minor = 2), comments = "Just a  test class")
    public class Main {
    
    }
    

数组类型注释元素

注释可以具有数组类型的元素。数组类型可以是以下类型之一:

  • 原始类型
  • java.lang.String type
  • java.lang.Class type
  • 枚举类型
  • 注释类型

我们需要在大括号中指定数组元素的值。

数组的元素由逗号分隔。

    @interface ItemList {
      String[] items();
    }
    
    @ItemList(items = { "A", "B" })
    public class Main {
       
    }
    

如果数组中只有一个元素,则允许省略括号。

    @ToDo(items={"A"})
    @ToDo(items="A")
    

传递一个空数组

    @ToDo(items={}) 
    

速记注释语法

假设我们有一个注释类型如下。

    public  @interface Enabled  {
        boolean status() default true;
    }
    

要使用带有默认值的Enabled注释类型注释程序元素,我们可以使用@Enabled()语法。

我们不需要为status元素指定值,因为它具有默认值。

我们可以进一步省略括号。

    @Enabled
    public class Main {
    
    }
    
    @Enabled()
    public class Main {
    
    }
    

只有一个元素的注释类型具有速记语法。

如果注释类型只有一个具有命名值的元素,我们可以省略name = value对中的名称。

以下代码声明了公司注释类型,它只有一个名为value的元素:

    public  @interface Company  {
        String value(); 
    }
    

当使用公司注释时,我们可以省略name = value对的名称。

    @Company(value="Inc.")
    public class Test   {
    }
    

变成

    @Company("Inc.")
    public class Test   {
    }
    

以下代码显示了如果元素数据类型是数组,如何使用此缩写。

    public  @interface Item   {
        String[] value();
    }
    
    @Item({"A", "B"})
    public class Test   {
    }
    

如果我们在数组注释类型中只指定一个元素,我们可以进一步省略大括号。

    @Item("A")
    public class Test   {
    }
    

如果我们在数组注释类型中只指定一个元素,我们可以进一步省略大括号。

点赞(0)
版权归原创作者所有,任何形式转载请联系作者; Java 技术驿站 >> Java 注释用法
上一篇
Java 注释默认值
下一篇
Java 注释类型