Java泛型简介
来源:互联网 发布:linux打开摄像头命令 编辑:程序博客网 时间:2024/05/17 01:09
引言
泛型(generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类。可以把类型参数看作是使用参数化类型时指定的类型的一个占位符(就像方法的形式参数是运行时传递的值的占位符一样)。
例:Map 类允许您向一个 Map 添加任意类的对象,即使最常见的情况,在给定映射(map)中保存某个特定类型(比如String)的对象。因 Map.get() 被定义为返回 Object,所以一般必须将 Map.get() 的结果强制类型转换为期望的类型,如下面的代码所示:
Map m = new Hashmap(); m.put("key","hello"); m.put("value",100.00); String s = (String) m.get("key"); float n = (float)m.get("value");
使用泛型表达:
Map<String,Float> m = new Hashmap<String,Float>(); m.put("key","hello"); String s = m.get("key"); float n = m.get("value");
上述实例,我们通俗理解为,泛型类似于能实现任何类型对象适配的能力。
分析
泛型,有何作用?
1. 由于泛型的类型约束,类型检查从运行时挪到编译时,类型错误导致的ClassCastException,议程将提前发现问题并解决问题。
2. 泛型使数据有更直接的表达,而非强制类型转换所得。消除源代码中的许多强制类型转换,这使得代码更加可读,并且减少了出错机会。
实现
我们通过两个实例来进行对比说明,体会泛型的实现原理及意义。
class Point { private Object x; private Object y; public Object getX() { return x; } public void setX(Object x) { this.x = x; } public Object getY() { return y; } public void setY(Object y) { this.y = y; } } public class PointTest { public static void main(String[] args) { Point point = new Point(); point.setX(123); // 整数接收 point.setY("北纬60"); // 这里是用Object来接收的,所以可以接收任何类型 int x = (Integer) point.getX(); int y = (Integer) point.getY(); System.out.println("x坐标:" + x); System.out.println("y坐标:" + y); } } 结果: Exception in thread "main" java.lang.ClassCastException : java.lang.String cannot be cast to java.lang.Integer at test.PointTest.main( PointTest.java:42 )
泛型实例:
class Point1<T> { // 声明一个泛型类 private T var; // 声明一个泛型变量 private T Yar; public T getVar() { return var; } public void setVar(T var) { this.var = var; } public T getYar() { return Yar; } public void setYar(T yar) { Yar = yar; } } public class PointTest1 { public static void main(String[] args) { Point1<Object> point = new Point1<Object>(); point.setVar(20); point.setYar("北纬"); System.out.println("x坐标:" + point.getVar()); System.out.println("y坐标:" + point.getYar()); } } 结果: x坐标:20 y坐标:北纬
总结
通过对泛型的初步了解,我对泛型的理解是,它拥有实现任何类型对象适配的能力。使集合中的数据有更直接的表达,而非强制类型转换所得期望类型。
实例只是对泛型的一个初步的了解,需要了解更多的知识体系请自行查询资料。
0 0
- java泛型简介
- java泛型简介
- Java泛型简介
- Java泛型简介
- Java 里的泛型简介.
- Java泛型简介(6)
- java范型简介
- java范型简介
- java简介
- Java简介
- Java简介
- Java简介
- Java简介
- java简介
- java简介
- Java简介
- Java简介
- java简介
- Android之intent传值的三种方法
- Find Minimum in Rotated Sorted Array
- _(:зゝ∠)_
- 创建私有cocoapods repo库 —— Private Pods
- 【开车了】9个大数据竞赛思路分享
- Java泛型简介
- CSS 图像透明度
- hdu 3509(矩阵快速幂)
- web开发
- 如何读取不清晰的条码?
- 堆&栈,数据结构。
- hex2bin
- poj之旅——3264
- JavaScript