JAVA泛型详解

泛型

1、为什么要有泛型?

虽然java提供了向上转型和向上转型,有些强制的转型虽然不会被编译器发现,但是会在运行的时候暴露出来。如下图和代码。
public class Main {
    //类的每个单词首字母要大写
    public static void main(String[] args) {
        Student student=new Student();
        Dog dog=new Dog();
        Object o1=student;
        Object o2=dog;
        Student student1=(Student) o2;
        System.out.println(student1);

    }
}
class Student{
    String name;
}
class Dog{
    String name;
}

运行结果:
在这里插入图片描述
为了解决这个问题,泛型就出来了。

2、定义泛型类

注意:在定义泛型类时,一般类型名称使用T来表达,而容器的元素使用E来表示

//定义泛型类
public class OverClass_01<T> {
    //定义泛型变量
    private T over;
    //定义getXXX()方法
    public T getOver() {
        return over;
    }
    //定义setXXX()方法
    public void setOver(T over) {
        this.over = over;
    }

    public static void main(String[] args) {
        //实例化一个Boole型对象
        OverClass_01<Boolean> over1=new OverClass_01<>();
        //实例化一个Float对象
        OverClass_01<Float> over2=new OverClass_01<>();
        //不需要类型转换
        over1.setOver(true);
        over2.setOver(12.3F);

        Boolean b=over1.getOver();
        Float f= over2.getOver();

        System.out.println(b);
        System.out.println(f);
    }
}

运行结果:
在这里插入图片描述

3、泛型的常规用法

public class ArrayClass_02<T> {
    private T[] array;

    public T[] getArray() {
        return array;
    }

    public void setArray(T[] array) {
        this.array = array;
    }

    public static void main(String[] args) {
        ArrayClass_02<String> a=new ArrayClass_02<>();
        String[] array={"成员1","成员2","成员3","成员4","成员5"};
        a.setArray(array);
        for (int i = 0; i < a.getArray().length; i++) {
            System.out.println(a.getArray()[i]);
        }
    }
}

运行截图:
在这里插入图片描述

public class MutiOverClass <K,V>{
    //定义一个集合HashMap实例
    public Map<K,V> map=new HashMap<>();
    public void put(K k,V v){
        map.put(k, v);
    }
    public V get(K k){
        return map.get(k);
    }

    public static void main(String[] args) {
        //创建实例对象
        MutiOverClass<Integer,String> mu=new MutiOverClass<>();
        //往集合添加键和值
        for (int i = 0; i < 5; i++) {
            mu.put(i,"我是集合成员"+i);
        }
        //获取集合中键对应的值
        for (int i = 0; i < mu.map.size(); i++) {
            System.out.println(mu.get(i));
        }
    }
}

运行截图:
在这里插入图片描述

public class AnyClass {
    public static void main(String[] args) {
        ArrayList<Integer> a=new ArrayList<>();
        a.add(1);
        for (int i = 0; i < a.size(); i++) {
            System.out.println("获取ArrayList容器的值"+a.get(i));
        }
        Vector<String> vector=new Vector<>();
        for (int i = 0; i < 5; i++) {
            vector.addElement("成员"+i);
        }
        for (int i = 0; i < vector.size(); i++) {
            System.out.println("获取Vector容器的值"+vector.get(i));
        }
    }
}

运行截图:
在这里插入图片描述

4、泛型的高级用法

 *	class 类名称<T extends anyClass>
 *     解释:使用泛型限制之后,泛型类的类型都必须实现和继承了anyClass这个接口或者类。
 *     无论anyClass是接口还是类,在进行限制的时候都必须使用extends关键字
 *
 *     泛型总结:
 *      1、泛型的类型参数只能是类类型,不可以是简单类型。
 *      2、泛型的类型的个数可以是多个
 *      3、可以使用extends关键字限制泛型的类型
 *      4、可以使用通配符限制泛型的类型
 *
 */
//限制泛型的类型
public class LimitClass_04 <T extends List>{
    public static void main(String[] args) {
        //只可以实例化已经实现List接口的类
        LimitClass_04<ArrayList> l1=new LimitClass_04<>();
        LimitClass_04<LinkedList> l2=new LimitClass_04<>();
    }
}

5、总结

1、泛型的类型只能是类类型,不可以是简单类型。
2、泛型的个数是可以有多个。
3、可以使用extends关键字限制泛型的类型。
4、可以使用通配符限制泛型的类型。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星光下的赶路人star

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值