类型注解

本文深入探讨了Java8引入的类型注解特性,包括@Target(ElementType.TYPE_PARAMETER)和@Target(ElementType.TYPE_USE)的使用场景。通过示例代码展示了如何在泛型类、接口、方法及类型使用处应用类型注解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java 8为ElementType枚举增加了TYPE_PARAMETER和TYPE_USE两个枚举值。这样就允许定义注解时使用@Target(ElementType.TYPE_USE)修饰,这种注解就是类型注解。

在Java 8以前,注解只能在定义程序元素的时候使用。从Java 8开始,类型注解可以在任何使用类型的地方使用。例如如下位置 :

  1. 创建对象
  2. 类型转换
  3. 使用implements实现接口
  4. 使用throws 声明抛出异常

上面这些位置都会使用到类型,因此可以使用类型注解来修饰。

 

TYPE_PARAMETER

直译为类型变量,被该值所修饰,意味着声明的注解可以作用在泛型类,泛型接口,泛型方法上。

 

 

示例代码

//声明注解

// 声明注解

@Target({ ElementType.TYPE_PARAMETER})

public @interface NotNull {}

 

//测试注解

public class TestNotNull<@NotNull T> {

    public <@NotNull T> void testT(T x) {}

}

 

public interface A<@NotNull T> {}

 

TYPE_USE

 

示例代码

 

// 声明类型注解

@Target(ElementType.TYPE_USE)

public @interface NotNull {}

 

使用类型注解

 

@NotNull // 声明类使用类型注解,在继承和实现的时候都使用类型注解

public class TestNotNull<@NotNull T> extends @NotNull HashMap<String, String> implements @NotNull Serializable {

    @NotNull

    private T t;

    // 声明成员变量使用类型注解

    @NotNull

    private String test;

 

    // 方法中使用类型注解,抛异常使用类型注解

    public static void main(@NotNull String[] args) throws @NotNull Exception {

        // 声明局部变量使用类型注解

        @NotNull

        String string;

        // 创建对象使用类型注解

        string = new @NotNull String("小钻风");

        // 强制类型转换使用类型注解

        Object object = (@NotNull Object) string;

        System.out.println(object);

    }

 

    @NotNull // 声明方法使用类型注解, 泛型使用类型注解

    public String test(List<@NotNull String> lists) {

        return "";

    }

 

//  @NotNull  返回值为空意味着没有类型返回,所以不能够使用类型注解

    public void test2() {}

 

    public <@NotNull T> void testT(@NotNull T xddf) {

    }

}

注意

在疯狂Java讲义一书中只明确提出了使用TYPE_USE的才是类型注解,并没有提到使用TYPE_PARAMETER也是类型注解,也没有否认使用TYPE_PARAMETER不是类型注解。有任何问题,欢迎提出。

类型变量一词来源于《Java核心技术 卷I》基础知识 (原书第9版) Cay S. Horstmann Gary Cornell 著 机械工业出版社

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

测试的自我修养

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值