1、什么是元注解?
元注解用于注解其他注解类型声明。Java 中的元注解类型包括 Target 、 Retention 、 Inherited 、 Documented 、 Repeatable ,它们是 Java 类库的一部分,在 java.lang.annotation 包中声明。
2、注解类型和注解实例之间有什么区别?
注解类型是一种类型,可在Java程序中能使用类型的任何地方使用,比如作为方法的返回类型、另一个注解类型声明中元素的类型等。而注解实例是通过特定语法创建的,为注解类型的元素提供值,例如 @Version(major = 1, minor = 2) 就是一个 Version 注解类型的一个实例。
3、注解类型声明中方法允许的返回类型有哪些?
方法在注解类型声明中允许的返回类型必须是以下类型之一:
- 任何基本类型(字节型、短整型、整型、长整型、浮点型、双精度浮点型、布尔型和字符型)
-
java.lang.String -
java.lang.Class - 枚举类型
- 注解类型
- 上述任何类型的数组(返回类型不能是嵌套数组)
4、声明一个名为Table的注解类型。它包含一个名为name的字符串元素。该唯一元素没有任何默认值。此注解只能用于类。其实例应在运行时可用。
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Table {
String name();
}
5、以下注解类型声明有什么问题?public @interface Version extends BasicVersion { int extended(); }
注解类型不能继承自另一个注解类型,即不能在注解类型声明中使用 extends 子句,所以该声明不会编译。
6、以下注解类型声明有什么问题? public @interface Author { void name(String firstName, String lastName); }
注解类型中的方法声明不能指定任何参数,而这里的 name 方法指定了 firstName 和 lastName 两个参数,所以该声明有误。
7、声明一个名为ModuleOwner的注解类型,它包含一个名为name的元素,该元素为String类型。ModuleOwner类型的实例应仅保留在源代码中,并且只能用于模块声明。
```java
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.SOURCE)
@Target(ElementType.MODULE)
public @interface ModuleOwner {
String name();
}
##8、声明一个可重复的注解类型,名为 Author。它包含两个 String 类型的元素:firstName 和 lastName。此注解可用于类型、方法和构造函数。其实例应在运行时可用。将 Author 注解类型的包含注解类型命名为 Authors。
以下是实现该需求的 Java 代码:
```java
import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.CONSTRUCTOR;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.TYPE;
@Retention(RetentionPolicy.RUNTIME)
@Target({TYPE, METHOD, CONSTRUCTOR})
@Repeatable(Authors.class)
@interface Author {
String firstName();
String lastName();
}
@Retention(RetentionPolicy.RUNTIME)

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



