Java 泛型
来源:互联网 发布:我怎么投诉淘宝店铺 编辑:程序博客网 时间:2024/05/21 15:44
一、泛型
Java泛型是JDK5中引入的一个新特性,提供了编译时类型安全检测机制,允许程序员在编译时检测到非法的类型。
假定:写一个方法,能够对整型数组、字符串数组甚至其他任何类型的数组进行排序,应该如何实现?
答案是利用泛型。
二、泛型方法
泛型方法在调用时可以接收不同类型的参数,其定义的规则如下:
- 所有泛型方法声明都有一个类型参数声明部分(由尖括号分隔),该类型参数声明部分在方法返回类型之前
- 每一个类型参数声明部分包含一个或者多个类型参数,参数之间用逗号隔开。一个泛型参数,也被成为一个类型变量,是用于指定一个泛型类型名称的标识符
- 类型参数能被用来声明返回值类型,并且能作为泛型方法得到的实际参数类型的占位符
- 泛型方法体的声明和其他方法一样。注意类型参数只能代表引用型类型,不能是原始类型(像int,double,char等)
实例
public class Util { public static <K, V> boolean compare(Pair<K, V> p1, Pair<K, V> p2) { return p1.getKey().equals(p2.getKey()) && p1.getValue().equals(p2.getValue()); }}public class Pair<K, V> { private K key; private V value; public Pair(K key, V value) { this.key = key; this.value = value; } public void setKey(K key) { this.key = key; } public void setValue(V value) { this.value = value; } public K getKey() { return key; } public V getValue() { return value; }}
我们可以如下调用泛型方法:
Pair<Integer, String> p1 = new Pair<>(1, "apple");Pair<Integer, String> p2 = new Pair<>(2, "pear");boolean same = Util.<Integer, String>compare(p1, p2);
或者在Java1.7/1.8利用type inference,让Java自动推导出相应的类型参数:
Pair<Integer, String> p1 = new Pair<>(1, "apple");Pair<Integer, String> p2 = new Pair<>(2, "pear");boolean same = Util.compare(p1, p2);
三、泛型类
泛型类的声明和非泛型类的声明类似,除了在类名后面添加了类型参数声明部分。
和泛型方法一样,泛型类的类型参数声明部分也包含一个或多个类型参数,参数间用逗号隔开。一个泛型参数,也被称为一个类型变量,是用于指定一个泛型类型名称的标识符。因为他们接受一个或多个参数,这些类被称为参数化的类或参数化的类型。
实例
public class Box<T> { // T stands for "Type" private T t; public void set(T t) { this.t = t; } public T get() { return t; }}
这样我们的Box类便可以得到复用,我们可以将T替换成任何我们想要的类型:
Box<Integer> integerBox = new Box<Integer>();Box<Double> doubleBox = new Box<Double>();Box<String> stringBox = new Box<String>();
阅读全文
0 0
- 【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泛型
- VC++2010中的GetWindowText与GetWindowTextW的区别
- 屏幕的宽高
- POJ3259 Wormholes(最短路,有无负环,spfa,模板)
- 深入浅出数据结构C语言版(17)——有关排序算法的分析
- 微信API入口文件api.php
- Java 泛型
- assert宏的使用
- 重新开始的php!
- python实现文件断点续传
- java和php的比较
- java练习题(1)、(2)、(3)
- Windows Practice_文件_内存映射(一)
- 《Python核心编程(第2版)》读书笔记(8)之析构(关键词:Python/析构/析构函数)
- [知了堂学习笔记]_牵线Eclipse和Tomcat第二篇 —— 安装Tomcat&&添加Tomcat到Eclipse