Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。
泛型演示
用于演示的Person类
public class Person {
private String name;
private String sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void setSex(String sex) {
this.sex = sex;
}
}
限制List中存储的数据类型
import java.util.ArrayList;
import java.util.List;
public class Test1 {
public static void main(String[] args) {
List<Person> list = new ArrayList<>();//列表。动态数组。多态
Person p1 = new Person();
p1.setName("张三");
p1.setSex("男");
Person p2 = new Person();
p2.setName("李四");
p2.setSex("女");
Person p3 = new Person();
p3.setName("王五");
p3.setSex("男");
list.add(p1);
list.add(p2);
list.add(p3);
System.out.println(list.size());
for (int i = 0; i < list.size(); i++) {
Person p = list.get(i);
System.out.println(p.getName());
}
}
}
限制Set(中的数据是无序的)中存储的数据类型
import java.util.HashSet;
import java.util.Set;
public class Test2 {
public static void main(String[] args) {
Set<Person> set = new HashSet<>();
Person p1 = new Person();
p1.setName("张三");
p1.setSex("男");
Person p2 = new Person();
p2.setName("李四");
p2.setSex("女");
Person p3 = new Person();
p3.setName("王五");
p3.setSex("男");
set.add(p1);
set.add(p2);
set.add(p3);
//Set集合里面的元素是无序的
//增强for循环
for(Person p:set){
System.out.println(p.getName());
}
}
}
Map中使用泛型限制键值对的数据类型
import java.util.HashMap;
import java.util.Map;
public class Test3 {
public static void main(String[] args) {
Map<Integer,String> map = new HashMap<>();
}
}
类中使用泛型
Array类
public class Array<E> {
private E[] array;
public Array(int size) {
array = (E[]) new Object[size];
}
public E get(int index){
return array[index];
}
public void set(int index, E Value){
array[index] = Value;
}
public int size(){
return array.length;
}
}
测试类
public class Test4 {
public static void main(String[] args) {
Person p1 = new Person();
p1.setName("张三");
p1.setSex("男");
Person p2 = new Person();
p2.setName("李四");
p2.setSex("女");
Person p3 = new Person();
p3.setName("王五");
p3.setSex("男");
Array<Person> array = new Array<>(3);
array.set(0, p1);
array.set(1, p2);
array.set(2, p3);
for (int i = 0; i < array.size(); i++) {
System.out.println(array.get(i).getName());
}
}
}
方法中使用泛型
MyCollectionUtil类
import java.util.ArrayList;
import java.util.List;
public class MyCollectionUtil {
//将一个数组转换为一个List
public static <E> List<E> build(E[] array){
List<E> result = new ArrayList<>();
for (int i = 0; i < array.length; i++) {
result.add(array[i]);
}
return result;
}
}
在方法中使用泛型,要将<>加在返回值前方
测试类
import java.util.List;
public class Test5 {
public static void main(String[] args) {
Person[] ps = new Person[3];
Person p1 = new Person();
p1.setName("张三");
p1.setSex("男");
Person p2 = new Person();
p2.setName("李四");
p2.setSex("女");
Person p3 = new Person();
p3.setName("王五");
p3.setSex("男");
ps[0] = p1;
ps[1] = p2;
ps[2] = p3;
List<Person> list = MyCollectionUtil.build(ps);
for (Person p : list) {
System.out.println(p.getName());
}
}
}
THE END