java 泛型
来源:互联网 发布:java并发是什么意思 编辑:程序博客网 时间:2024/06/07 08:04
泛型,也就是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。
看看泛型的需求:
public class GenericTest { public static void main(String[] args) { List list = new ArrayList(); list.add("qqyumidi"); list.add("corn"); list.add(100); for (int i = 0; i < list.size(); i++) { String name = (String) list.get(i); // 1 System.out.println("name:" + name); } }}
上面的代码编译没错误,但是输出的时候肯定出错,因为循环的洗后一个整形没法转化成字符串类型,但是为什么编译可以通过呢,因为集合默认的数据类型是Object,所以集合存储的时候等于对于数据的类型是没有记忆的,为了解决这种问题就需要有参数化类型来解决。其实这种泛型用的很多,平时不注意而已,比如new ArrayList<string>(),这种指定了参数类型,就是上面的解决办法,因为Arraylist的定义就是参数化的定义,大家可以自己看源码。
1.泛型接口:
之前的文章中也使用到过,直接上个例子一看就明白了
interface QQQ<T>{ void callback(T t); } public class HHH implements QQQ<Integer>{ @Override public void callback(Integer integer) { } }2.泛型方法:
public class ArrayAlg { public static <T> T getMiddle(T[] a) { return a[a.length / 2]; }}
上面getmiddle就是一个泛型方法,用来返回一个数组的中间值。
3.泛型类:
public class GenericTest { public static void main(String[] args) { Box<String> name = new Box<String>("corn"); System.out.println("name:" + name.getData()); }}class Box<T> { private T data; public Box() { } public Box(T data) { this.data = data; } public T getData() { return data; }}
补充:
1.泛型的类型数量可以是一个或者多个,直接用逗号隔开就行了。
2.你定义的泛型,在实例化的时候是不能用基本数据类型的,比如QQQ<int> 这是不行的,必须是自定义类型或者是包装类型QQQ<Integer>是可以的。
3.泛型的好处:安全性好,消除了强制类型转换,性能也提高了
4.java中没有泛型数组一说,想要定义一个数组只能是强制转换:Pair<String, String>[] pairs = (Pair<String, String>[])
new
Pair[
10
];
5。不能抛出也不能捕获泛型类的异常 public
static
<T
extends
Throwable>
void
doWork(T t)
throws
T ,这种不存在会报错
6.泛型类,不允许存在静态变量或者方法,普通类中可以存在静态的泛型方法。比如说静态类中:
7.泛型通配符:
上面定义了一个泛型类,那么我就可以说Box<?>在逻辑上是Box<Integer>、Box<Number>...等所有Box<具体类型实参>的父类,同时这个Box<?>就是泛型通配符
当具体类型不清楚或者说不需要明确表示出具体类型的时候,我们可以使用泛型通配符来表示。
public static void getData(Box<?> data) { System.out.println("data :" + data.getData()); } public static void getUpperNumberData(Box<? extends Number> data){ System.out.println("data :" + data.getData()); }这就是两个使用麻烦性通配符的例子。
再来解释一下泛型通配符的上限和下限的说法
上限:extend
Box<? extends Number> 意思就是说?是number的自身或者number类的子类
下限:super、
和extend相反,不是子类,是父类
- 【java 2】java泛型
- Java 泛型 Java generic
- Java Tutorials_Generics(java泛型)
- Java基础 Java 泛型
- java 泛型
- java泛型
- Java泛型
- Java泛型
- java泛型
- java泛型
- java泛型
- Java 泛型
- Java泛型
- Java 泛型
- JAVA 泛型
- java 泛型
- java泛型
- Java泛型
- SpringMVC通过工具类获取Request域
- linux环境下安装PHP的OpenSSL扩展
- crontab 定时写法整理
- iOS开发之旅(1):实现一个APP界面框架
- iOS 手动打包动态静态库
- java 泛型
- ToolTip.js 的使用介绍
- 判断元素是否在可视区域内
- 通过scheme打开另一个APP
- 第一章 PX4-Pixhawk-程序编译过程解析
- C++实现对简单的文件读写
- javascript中new Date()的浏览器兼容性问题
- java 字节流与字符流的区别
- github开源项目阅读