Java泛型
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java泛型,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2976字,纯文字阅读大概需要5分钟。
内容图文
![Java泛型](/upload/InfoBanner/zyjiaocheng/640/a198b15b21184547973a267b5d44f202.jpg)
Java 泛型
1.什么是Java中的泛型
泛型是Java5.0后出现的一个新特性,又称参数化类型,也就是将类型当作参数,传递给类,接口,方法。
【对比】 形式 应用场合 备注
普通的参数 传递的是值 只能用在方法中 要求形参和实参必须一致
泛型参数 传递的是类型 可以用在类、方法或接口中 可以不用传参,默认是Object类型
2.泛型的好处
-
编译时检查类型,提高安全性;
-
减少类型转换次数,提高软件运行效率;
没有使用泛型:
向上转型 向下转型
String————————>Object————————>String
使用泛型:String————————>String————————>String
3.泛型的语法
语法 *
List<XX> list = new ArrayList<XX>(); 全类型的写法
List<XX> list = new ArrayList<>();//jdk7.0新特性 通过类型推断可以省略后面的类型,建议这样写
注意:
- XX只能是类或引用数据类型 ,不能是基本数据类型;
- 前后类型必须一致;
- 带泛型的类如果不指定类型,则默认为Object类型;
4.自定义泛型
4.1自定义泛型类
语法:
class MyGeneric<T,U>{
T t;
U u;
}
可以定义一个泛型或多个泛型
注意:
1、里面可以有任意普通成员和 使用泛型的成员
2、不能有使用泛型的静态成员和泛型数组初始化
使用:
①创建对象
MyGeneric<String,Integer> m = new MyGeneric<>();
②继承该类
class Sub extends MyGeneric<String,Integer>{}
注意:如果子类声明时依然不能确定父类的泛型,则可以继续定义成泛型类
eg:
class Sub<T> extends MyGeneric<T, Integer>{} 里面的第一个泛型 在子类中不确定,子类可以继续使用泛型;
4.2自定义泛型接口
语法:
interface MyGenericInt<T>{}
注意:
泛型可以使用在抽象方法或默认方法中,可以当做参数也可以当做返回类型!
使用:
泛型接口确定的时期:
①继承该接口
public interface MyGenericSub implements MyGenericInt<Interger>{} 确定泛型为Integer
②实现该接口
public Class MyGenericClass implements MyGenericInt<Interger>{} 确定泛型为Integer
注意:如果子接口或实现类依然不能接口的泛型,则可以继续定义成泛型类或 泛型接口
eg:
public interface MyGenericSub<T> implements MyGenericInt<T>{} 泛型不确定,在子接口中继续使用泛型;
4.3自定义泛型方法
语法:
方法必须定义在类体或接口中!
说明:泛型方法可以定义在普通类或接口中,以及泛型类或泛型接口中!
语法:
public<T,U,R> void method(T t,U u,R r) {
}
注意:如果泛型方法用在泛型类或泛型接口时,最好泛型标记区分开,提高代码的阅读性
使用:
在方法被调用的时候确定泛型方法的类型,当方法被调用的时候,实参的类型就是对应的泛型类型。
5.Java泛型中的通配符
- 泛型不具备继承性
List<Map> list = new ArrayList<HashMap>(){} 两边的泛型 一个为Map 一个为HashMap,这样是错误的;
- 泛型通配符 (通配符是在使用泛型类或者泛型接口时使用)
?:任意泛型类型。只能读取,不能添加。除了null
Collectin<?> col = new ArrayList<>();
demo:
pulic void printCollection(Collection<?> col){
//获取迭代器
Iterator<?> iterator = clo.iterator();
//循环打印
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
//此方法可以传入存储任意类型数据的Collection接口的实现进行迭代,但是只能读取,不能添加。
? extends XX:支持XX类型和其子类类型。相当于规定了泛型的上限。只能读取,不能添加。除了null
Collectin<? extends XXX> col = new ArrayList<>();
? super XX:支持XX类型和其父类类型。相当于规定了泛型的下限。只能读取,不能添加。除了XX类型和null
Collectin<? super XXX> col = new ArrayList<>();
内容总结
以上是互联网集市为您收集整理的Java泛型全部内容,希望文章能够帮你解决Java泛型所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。