泛型

一、泛型的概念

先回顾下集合和数组的区别:

数组长度固定不变,可以存放任意数据类型,但存放的数据类型要一致。

集合长度可变,可以存放任意引用数据类型,但存放的数据类型可以不一致。比如一个集合既可以存放String类型的数据又可以存放Integer类型数据。

泛型长度可变,可以存放任意引用数据类型,但存放的数据类型要一致。

二、泛型的使用

主要有泛型类、泛型接口、泛型方法以及泛型通配符。

1、泛型类

在创建对象的时候确定泛型,指定好了后这个对象就只能装指定的数据类型了。

如果要换其他数据类型,就要重新创建该类的对象,重新指定泛型。

使用格式:修饰符 class 类名<变量名> { }

//泛型类
public class MyObject<T> {  //变量名也可以用其它字母
    private T t;  //变量t

    public T getT() {
        return t;
    }
    public void setT(T t) {
        this.t = t;
    }
}

//测试类
public class Test02 {
    public static void main(String[] args) {
        //比如,创建一个String类型的对象
        MyObject<String> myObject = new MyObject<>(); // 省略写法
        myObject.setT("abc");
        System.out.println(myObject.getT()); //abc

        //比如,创建一个Integer类型的对象
        MyObject<Integer> myObject2 = new MyObject<Integer>();  //标准写法
        myObject2.setT(123);
        Integer integer = myObject2.getT();
        System.out.println(integer); //123
    }
}

-----------------------------------------------------

//泛型不能直接用于数组类型的创建
public class Collection02<E> {
    //private E[] e = new E[10];  //警告!不能实例化
    //但是可以用Object,再强转,就能做到指定输入指定输出了
    private Object[] object = new Object[10]; //定义一个Object类数组
    //添加指定类型元素
    public void add(E e){
        object[0] = e;
    }
    public E get(){
        return (E) object[0];   //强转
    }
}

//测试类
public class Collection02Test {
    public static void main(String[] args) {
        //比如创建一个String类型的对象
        Collection02<String> str= new Collection02<>();
        str.add("abc");    //abc
        System.out.println(str.get());
        //比如创建一个Integer类型的对象
        Collection02<Integer> in = new Collection02<>();
        in.add(123);
        System.out.println(in.get());    //123
    }
}

2、泛型接口

//泛型接口
public interface Interface01<A> {
    void add(A a);  //定义一个方法
}
---------------------------------
//实现类
//1.实现接口,同时指定泛型为String public class Interface01Test implements Interface01<String> { @Override public void add(String s) { } } /* //2.实现接口,但不指定泛型,实现类就会变成泛型类 public class Interface01Test<A> implements Interface01<A> { @Override public void add(A a) { } } */

3、泛型方法

格式:修饰符 <泛型变量名> 返回值类型 方法名(参数){ }

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

public class Test01 {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        add1(list, 456);
        add1(list, 789);
        add1(list, 123);
        System.out.println(list);  //[456, 789, 123]
    }

    //定义一个泛型方法
    public static <T> void add1( List<T> list , T t){
        list.add(t);
    }
}

 

posted @ 2022-04-25 20:54  鹿先森JIAN  阅读(27)  评论(0编辑  收藏  举报