import java.util.ArrayList;
import java.util.List;
import static java.lang.System.*;
/**
* Created by leo on 17-7-11.
Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。
泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。
*/
public class GenericNote {
public static void main(String[] args){
Page<String> name = new Page<>();
Page<Integer> age = new Page<>();
ArrayList<String> names = new ArrayList<>();
names.add("abc");
names.add("def");
ArrayList<Integer> ages = new ArrayList<>();
ages.add(10);
ages.add(20);
name.setList(names);
age.setList(ages);
out.println("name class:" + name.getClass());//class:class Page
out.println("age class:" + age.getClass());//class:class Page
out.println(name.getClass() == age.getClass());//true
//调用泛型方法
Double[] doubles = {1.1, 2.2, 3.3};
printArray(doubles);
// extends的使用
int max = maximum(2, 3, 1);
out.println(max);
//类型通配符?,?代表不可知的类,相当于具体类的父类
getData(ages);
getData(names);
// 实现了泛型接口的类
Counter counter = new Counter();
out.println(counter.count("abcdefghijklmn"));
}
// 泛型方法,<E>的存在是泛型方法定义的形式,其中E是类型的参数,意为E类型
public static <E> void printArray(E[] inputArray){
for (E e:inputArray) {
out.printf("%s", e);
}
}
// extends的使用,<T extends Comparable<T>>限定了T的类型范围。supers关键字的用法类似,含义相反而已
public static <T extends Comparable<T>> T maximum(T x, T y, T z){
T max = x;
if(y.compareTo(max) > 0){
max = y;
}
if(z.compareTo(max) > 0){
max = z;
}
return max;
}
// 类型通配符?,?代表不可知的类,相当于具体类的父类,在list中就可以放入?的各个子类
public static void getData(List<?> data){
out.println("data : " + data.get(0));
}
}
// 泛型类
class Page<T> {
private static final int PAGESIZE = 10;
private Long pageNow;
private ArrayList<T> list;
public Page() {
pageNow=1L;
}
public static int getPAGESIZE() {
return PAGESIZE;
}
public Long getPageNow() {
return pageNow;
}
public void setPageNow(Long pageNow) {
this.pageNow = pageNow;
}
public ArrayList<T> getList() {
return list;
}
public void setList(ArrayList<T> list) {
this.list = list;
}
}
// 接口泛型的定义
interface Count<K, V> {
V count(K k);
}
//实现了该泛型接口的类
class Counter implements Count<String, Integer>{
@Override
public Integer count(String s) {
return s.length();
}
}
Java基础之泛型
最新推荐文章于 2021-10-22 08:43:48 发布