30-泛型

马铃薯1 / 2024-01-27 / 原文

 

package generics;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class GenericsDemo1 {
    public static void main(String[] args){

        // 创建对象
        // 不写泛型,默认为Object类型,可以存储任意类型的数据
        // 格式:集合类 对象名 = new 集合类();
        ArrayList list1 = new ArrayList();
        list1.add("abc");
        list1.add(1);
        list1.add(true);
        System.out.println(list1);

        // 迭代器不适用泛型
        System.out.println("=================迭代器遍历(不使用泛型)==================");
        Iterator it1 = list1.iterator();
        while(it1.hasNext()){
            // 取出的元素是Object类型
            Object obj = it1.next();
            System.out.println(obj);
        }


        // 泛型只能是引用类型,不能是基本类型
        // 格式:集合类<泛型> 对象名 = new 集合类<泛型>();
        ArrayList<String> list2 = new ArrayList<String>();
        list2.add("张三");
        list2.add("李四");
        list2.add("王五");
        System.out.println(list2);

        // 迭代器使用泛型
        System.out.println("=================迭代器遍历(使用泛型)==================");
        Iterator<String> it2 = list2.iterator();
        while(it2.hasNext()){
            // 取出的元素是String类型
            String s = it2.next();
            System.out.println(s);
        }
    }
}

 

泛型类

常见的泛型标识符:E、T、K、V

1)E:Element 元素

2)T:Type 类型

3)K:Key 键

4)V:Value 值

package generics;

/*
*  常见的泛型标识符:E、T、K、V
*  E:Element 元素
*  T:Type 类型
*  K:Key 键
*  V:Value 值
*
*  清楚不同的泛型,在什么时机确定到具体的类型
* 
*  泛型类的使用场景,创建对象的时候
*
* */

public class GenericsDemo2 {
    public static void main(String[] args){

        Student<String> stu = new Student<>("张三", "23");
        System.out.println(stu.getName() + "," + stu.getAge());

    }
}

class Student<E>{
    private E name;
    private E age;

    public E getName() {
        return name;
    }

    public void setName(E name) {
        this.name = name;
    }

    public E getAge() {
        return age;
    }

    public void setAge(E age) {
        this.age = age;
    }

    public Student(E name, E age){
        this.name = name;
        this.age = age;
    }
}

 

泛型方法

 

泛型接口

泛型通配符

泛型的限定