泛型(黑马程序员版)

【Java入门基础视频教程,java零基础自学就选黑马程序员Java入门教程(含Java项目和Java真题)】https://www.bilibili.com/video/BV1Cv411372m?p=116&vd_source=9f87a7ce44630c11c1428c5f90d42fbb

String

集合

集合与数组相比 集合大小可变

“容器”

适用案例:购物车

ArrayList

提供创建容器对象的方式

提供相应方法对容器进行操作(增删改查)

public class ArrayListTest {

    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();//泛型约束类型
        list.add("heima");
        list.add("heima2");
        list.add("heima3");
        list.add("heima4");
        //list.add(1234);//不行
        System.out.println(list);

        //几种方法
        list.add(1,"mysql");
        list.add("end");
        System.out.println(list);
        list.remove(1);
        System.out.println(list);
    }
}

泛型

泛型类

//泛型类的用法

//1.自定义的ArrayList泛型类
//E是泛型指代的对象;调用的时候应该传参进来(String抑或是自定义的类)(int等基本类型不行)
class MyArrayList<E>{
    private Object[] arr = new Object[10];
    private int size;//当前位置

    public boolean add(E e){
        arr[size++]=e;
        return true;
    }
    public E get(int index){
        if(index>size){
            return null;
        }
        else{
            return (E)arr[index];
        }

    }
}

//2.自定义多个参数的泛型类
class MyClass<E,T>{
    public void put(E e,T t){
        //可以使用多个参数
    }
}

//3.限定泛型类的参数必须继承自某个类
class MyClass2<E extends Animal>{
    public void put(E e){//这个E必须是Animal或者继承自Animal

    }
}

class Animal{}
class Cat extends Animal{}
class Dog extends Animal{}

public class ArrayListFX {
    public static void main(String[] args) {
        //3.实验
        MyClass2<Animal> myClass20 = new MyClass2<>();//ok
        MyClass2<Cat> myClass21 = new MyClass2<>();//ok
        //MyClass2<String> myClass22 = new MyClass2<>();这个会报错
    }

}

泛型接口

与泛型类类似

public class InterfaceFX {
}

class Student{}

class Teacher{}
interface Data<E>{

    boolean add(E e);
    ArrayList<E> getByName(String name);
}

//生成的重写方法就将参数换成了泛型对应的参数
class TeacherData implements Data<Teacher>{
    @Override
    public boolean add(Teacher teacher) {
        return false;
    }

    @Override
    public ArrayList<Teacher> getByName(String name) {
        return null;
    }
}
class StudentData implements Data<Student>{
    @Override
    public boolean add(Student student) {
        return false;
    }

    @Override
    public ArrayList<Student> getByName(String name) {
        return null;
    }
}
//限定泛型类的参数必须继承自某个类也是可以的
interface MyData<E extends Animal>{

    boolean add(E e);
    ArrayList<E> getByName(String name);

}

泛型方法

这里前者是方法选用的泛型,是泛型方法;

后者是泛型类要求的泛型做为返回值,不是泛型方法

![泛型擦除](泛型擦除.png)public class FunFX {

    //泛型方法
    //<>中声明了可以使用的对象;T指返回一个T对象
    public static <T,E> T MyReturn(T t,E e){
        return t;
    }
    //一个实例
    public static <T extends Car> void go(ArrayList<T> arr){//注意加extends限定,不然狗也可以开车
        System.out.println(arr.toString()+"开起来了");
    }
    public static void go1(ArrayList<? extends Car> arr){//?表示通配符,与上述写法意义相同;注意也可以用extends;还可以使用super,表只可使用该类与其父类
        System.out.println(arr.toString()+"开起来了");
    }
    public static void main(String[] args) {
        //测试泛型方法实例
        BMW bmw = new BMW();
        BENZ benz = new BENZ();
        ArrayList<BMW> bmws = new ArrayList<>();
        bmws.add(bmw);
        ArrayList<BENZ> benzs = new ArrayList<>();
        benzs.add(benz);
        go(bmws);//[BMW@1d81eb93]开起来了
        go1(benzs);//[BENZ@6e8cf4c6]开起来了
    }

}

class Car{ }
class BMW extends Car{}
class BENZ extends Car{}

泛型擦除和泛型支持的类型

(不能用int,double;可以用Integer,Double)

posted @ 2024-01-24 00:31  AUTI_SMER  阅读(62)  评论(0)    收藏  举报