1.泛型
防止数据类型不安全问题的出现
定义一个泛型类,生成对应的get,set,tostring等方法
在测试类中,使用泛型后,创建的info对象,属性必须是定义的类型,注意:“指定泛型类型时,只能是引用数据类型,不能是基本数据类型”
通配符
定义一个泛型
再定义一个普通方法,接收string类型
在测试类中,引用传递泛型,必须类型相同,泛型相同 ![](https://img-blog.csdnimg.cn/6e7ca65209ee4739b7233c768aa510aa.png)
想让function方法接收任意类型,必须使用通配符
受限的泛型
引用传递类型可以设置泛型对象的传递上限< ? extends 类>和传递下限<? super 类>
以number为例,泛型上限,定义的类型不能超过Number,只能是Number类型,或Number的子类
泛型下限则反之,定义的类型不能低于Number,只能是Number类型,或Number的父类
泛型的接口,第一种方法
为接口添加泛型,使用泛型接口的类,该类在实现时使用的泛型必须和接口的一致
类实现接口时,为其指定泛型类型
测试类中就不需要再指定类型了
第二种方法
类实现接口时将该类也设置为泛型类,要和接口泛型一直
测试类中需要指定类型
泛型方法
泛型方法实在方法上定义泛型,和其所在类是否是泛型没有关系
2.注解
预定义注解:JDK中自带的注解,JVM会解析
自定义注解 :自己定义的注解(默认注解是没有意义,只有在解析注解时才有意义)
使用自定义注解没有任何意义,如果想变的有意义,需要结合反射来解析并赋予作用,@Override注解-->是因为JVM解析了该注解
@Controller-->是因为spring框架解析了该注解
元注解:定义在注解上的注解,是用来限制注解的使用范围
@Retention-->限制注解什么时候生效。
1.SOURCE:源码时生效
2.CLASS:字节码时生效
3.RUNTIME:运行时生效
@Targrt-->限制该注解可以使用在哪些地方
1.TYPE:使用在类上
2.FIELD:使用在属性上
3:METHOD:使用在方法上
4,PARAMETER:使用在参数上
5,CONSTRUCTOR:使用在构造方法上
@Documented-->生成api文档时是否含有该注解
注意:代码页面不能加中文注释![](https://img-blog.csdnimg.cn/cb19013ad7a14bb489009ba2022a962f.png)
自定义注解--属性
数据类型可以用:基本类型(8个),字符串类型,和这些类型的数组