【Java基础】Java泛型

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
点赞0 分享
tinsur的头像-Tinsur Blog