-
Java基础(2)|范型
1、范型优点
1、代码简洁,不用强制转换
2、程序更加健壮(编译时期没有警告,运行时就不会出现ClassCastExpection异常)
3、可读性和稳定性(限定了类型)
2、泛型基础
类上定义的泛型,方法上也可以使用,类上声明的泛型只能对非静态成员有效
public class ObjectTool<T> {
private T obj;
}
创建类时指定类型,使用时会自动转换
ObjectTool<String> tool = new 0bjectTool<>();
泛型先定义,后使用
//定义泛型方法..
public <T> void show(T t) {
System.out.println(t)
}
类型通配符,如:参数中传递一个list集合,但不确定时什么类型。
public void test(List<?> list){} // ? :任意类型,只能传?所代表的的类型
为什么不用list<Object>? 答:可以传所有类型进去
list<Object> 跟 List<String>毫无关系,仔细品
设定通配符上限
如:参数中传递一个list集合,但只能是(integer,short,byte,double)类型,怎么弄?
List<? extends Number> //子类或者自身
设定通配符下限
public TreeSet(Comparator<? super E> comparator) {
this(new TreeMap<>(comparator));
}
有什么用?
假若你想比较字符串的大小,你可以传入一个比较器(Comparator<String>),也可以传入Object的比较器(Comparator比较器),
会使代码更加灵活(只要能够比较字符串的大小就行了)
总结
带有子类限定的,可以从泛型读取
带有超类限定的,可以从泛型写入
关于泛型与通配符
//使用通配符
public static void test(List<?> list) {}
//使用泛型方法
public <T> void test2(List<T> t) {}
常用的泛型字符含义
- E - Element (在集合中使用,因为集合中存放的是元素)
- T - Type(Java 类)
- K - Key(键)
- V - Value(值)
- N - Number(数值类型)
- ? - 表示不确定的java类型
一般怎么使用他们呢?
答:
一、泛型:
参数之间有依赖关系
返回值与参数之间有依赖关系
二、通配符
无依赖关系的
泛型擦除:泛型在编译成class文件后,会进行擦除。
应用场景
1、ElasticsearchRepository
2、SpringDataJpa
__EOF__
栏目列表
最新更新
Java基础(3)|Collection
Java基础(2)|范型
Java基础(1)|Java8新特性
Spring系列11:@ComponentScan批量注册bean
Java文档注释(拓展)
SpringBoot自动装配 _
3-面向对象(2)
java内存区域模型和详解
3-面向对象(1)
2-基本语法
MongoDB常用命令(2)
MongoDB基本介绍与安装(1)
SQLServer触发器调用JavaWeb接口
SQL Server索引的原理深入解析
SqlServer2016模糊匹配的三种方式及效率问题
SQL中Truncate的用法
sqlserver 多表关联时在where语句中慎用tri
链接服务器读取Mysql---出现消息 7347,级别
SQL Server解惑——为什么你拼接的SQL语句换
MySQL视图了解一下
噢!JavaScript (1):正则表达式replace的一个
前端之JavaScript—BOM和DOM
基于Vue2.x的前端架构,我们是这么做的
大文件切片上传到服务器
前端之jQuery快速入门
Github Pages 速度慢 vercel 部署静态博客
聚类算法在 D2C 布局中的应用
eslint遇到的报错
大前端JS篇之搞懂【WeakSet】
PHP学生校园考勤管理系统,使用MYSQL数据库