Java注解与反射核心问题解析

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)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值