0
点赞
收藏
分享

微信扫一扫

java学习笔记(9) ---泛型

1、什么是泛型?

泛型就是一个标签:<数据类型> , 泛型可以在编译阶段约束只能操作某种数据类型。
泛型和集合都只能支持引用数据类型,不支持基本数据类型

2、泛型的好处

泛型在编译阶段约束了操作的数据类型,从而不会出现类型转换异常。
体现的是Java的严谨性和规范性,数据类型,经常需要进行统一!

3、自定义泛型类

泛型类的概念:
        使用了泛型定义的类就是泛型类。

泛型类的格式:
        修饰符 class 类名<泛型变量>{

        }
    泛型变量建议使用 E , T , K , V

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

public class _202174Demo {
    public static void main(String[] args) {
        MyArrayList<String> a = new MyArrayList<>();
        a.add("vae");
        a.add("vae");
        a.add("许嵩");
        System.out.println(a);
    }

}
class MyArrayList<E> {
    private ArrayList<E> arrayList = new ArrayList<>();
    public void add(E e) {
        arrayList.add(e);
    }

    public void remove(E e) {
        arrayList.remove(e);
    }

    @Override
    public String toString() {
        return arrayList.toString();
    }
}

 泛型方法的定义格式:
        修饰符 <泛型变量> 返回值类型 方法名称(形参列表){

        }
        注意:方法定义了是什么泛型变量,后面就只能用什么泛型变量。
        泛型类的核心思想:是把出现泛型变量的地方全部替换成传输的真实数据类型

public static void main(String[] args) {
        Integer[] arr = {12,123,214,6,4,3};
        System.out.println(arrToString(arr));
    }
    public static <T> String arrToString(T[] arr) {
        StringBuilder stringBUilder = new StringBuilder();
        stringBUilder.append("[");
        for (int i = 0; i < arr.length; i++) {
            if (arr != null && arr.length > 0)
                stringBUilder.append(i == arr.length - 1 ? arr[i] : arr[i] + ",");

        }
        stringBUilder.append("]");
        return stringBUilder.toString();
    }

泛型接口的格式:
        修饰符 interface 接口名称<泛型变量>{

        }

泛型接口的核心思想,在实现接口的时候传入真实的数据类型
这样重写的方法就是对该数据类型进行操作!

interface People<E> {
    void run();
}

4、泛型通配符

通配符:?
        ?可以用在使用泛型的时候代表一切类型。
        E , T , K , V是在定义泛型的时候使用代表一切类型。

    泛型的上下限:
        ? extends Car : 那么?必须是Car或者其子类。(泛型的上限)
        ? super  Car :那么?必须是Car或者其父类。(泛型的下限。不是很常见)

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

public class _202174Demo {
    public static void main(String[] args) {
        List<Bao> baos = new ArrayList<>();
        baos.add(new Bao());
        run(baos);

        List<Ben> bens = new ArrayList<>();
        bens.add(new Ben());
        run(bens);

    }
    // 注意List<? extends Car>可以接任何以Car为父类的集合
    public static void run(List<? extends Car> cars) {

    }
}

class Car {}
class Ben extends Car{}
class Bao extends Car{}

 

举报

相关推荐

0 条评论