泛型和注解

系列文章目录

讲解泛型类,泛型接口,泛型方法,类型擦除以及一些注解

一、泛型

1.作用

泛型能够使我们编写出来通用的代码,提高代码的可读性和重用性。通过使用泛型,我们可以在类和接口和方法中使用类型参数,使得代码可以处理不同类型的数据,同时保持类型安全

2.泛型类

如果泛型参数定义在类上,那这个类就是个泛型类

【修饰符】class 类名<泛型类型名1,泛型类型名2.........>{}

实例化时:

泛型类名<具体类型1,具体类型2....> 对象名 = new 泛型类名<>(实参列表);

可以限定类的实例化参数类型

3.泛型接口

如果泛型参数定义在接口上,那这个类就是个泛型接口

4.泛型方法

如果泛型参数定义在方法上,那这个类就是个泛型方法

【修饰符】<泛型类型名> 返回值类型 方法名(形参列表){}

泛型方法调用:(不需要额外指定泛型类型,系统会自动识别)

类对象.泛型方法(实参);

类名.static泛型方法(实参);

==两边所指定的泛型类型必须相等

5.通配符

?  :可以通配任意类型

注意:

1.使用通配符(?)的集合,不能再往里添加元素,但是可以遍历集合

2.如果添加元素,编译器不知道将来是什么类型,所以会报错。

6.泛型边界

extends super

1.上限

类型名<? extends 类型> 对象名称

只能接收该类型以及该类型的子类型,所以是定义了上限

2.下限

类型名<? super 类型> 对象名称

只能接收该类型和该类型所继承的父类型,所以是定义了下限

7.类型擦除

泛型类型仅存在于编译期间,编译后的字节码和运行时不包含泛型类型,所有的泛型类型映射到同一份字节码文件

作用:

Java泛型只存在于编译时期,泛型使编译器可以在编译期间对类型进行检查以提高类型安全,减少运行时由于对象类型不匹配引发的异常,但是编译成功后,所有泛型信息会被擦除,变为Object

注意:

泛型信息被擦除后,所有的泛型类型都会统一变为Object

二、注解

1.作用

1.编译检查:编译器通过代码里标记的注解实现基本的编译检查

2.编写文档:javadoc工具根据代码中注解生成API文档

3.代码分析:通过代码里的注解对代码进行分析(借助反射实现)

2.注解和注释的区别

注解是给其他程序看的,通过参数的设置,可以在编译后class文件中【保留】注解的信息,其他程序读取后,可以完成特定的操作

注释是给程序员看的,无论怎么设置,编译后class文件中都【没有】注释信息,方便程序员快速了解代码的作用和结构

3.定义

注解本质上是一个接口,默认继承Annotation接口

注解属性本质上是接口中的抽象方法

4.注解属性赋值

@注解名(属性1 = 属性值,属性2 = 属性值,......)

如果注解属性存在default默认值,则使用该注解时,可以不给该属性赋值

如果属性名称为value,则只需要给其赋值,则value可以省略,直接赋值

数组属性赋值时,一般{}包裹,如果只有一个值可以省略{};

5.元注解

我们在自定义注解的时候,一般会使用元注解,来设置自定义注解的基本特点。

元注解就是对注解进行基本信息设置的注解

常用元注解:

@Target:描述注解的使用范围,例如用在类上面还是方法上面

@Retention:描述注解的保存策略,是保留在源代码中,class文件,还是加载到内存里

@Documented:描述该注解是否会被javadoc抽取到API文档里

@Inherited,描述该注解是否会被继承,如果一个使用了@Inherited修饰的annotation类型被用于一个class,则这个annotation将被用于该class的子类

6.注解范围 

注解范围定义在枚举类ElementType中

常用的注解:

TYPE:使用在类,接口,注解,枚举等类型上面

FIELD:使用在属性上面

METHOD:使用在方法上面

PARAMETER:使用在方法的参数前面

CONSTRUCTOR:使用在构造器上

LOCAL_VARIABLE:使用在局部变量上

ANNOTATION_TYPE :使用在注解类型上

TYPE_PARAMETER:使用在声明泛型参数前面,JDK8新增

PACKAGE:使用在包上

TYPE_USE:使用在大妈中任何类型前,JDK8新增

7.保持

三种保留策略,定义在枚举类RetentionPolicy中

类中使用的注解,根据配置,可以保持到三个不同的阶段:

SOURCE:注解只保留在源文件,当java文件编译class文件时,注解被遗弃

CLASS:注解被保留在class文件,但JVM加载class文件时被遗弃

RUNTIME:注解不仅仅保存到class文件中,JVM加载class问价后,仍然存在

8.注解小结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值