Java基础之Java泛型

Java基础之Java泛型

一、泛型的意义与目的

背景:因为集合存放的数据类型不固定,故往集合里面存放元素时,存在安全隐患,如果在定义集合时,可以想定义数组一样指定数据类型,那么就可以解决该类安全问题。JDK1.5后出现了泛型,用于解决集合框架的安全问题。泛型是一个类型安全机制。

目的:

  1. 类型安全

    • 泛型的主要目标是提高 Java 程序的类型安全

    • 编译时期就可以检查出因 Java 类型不正确导致的 ClassCastException 异常

    • 符合越早出错代价越小原则

  2. 消除强制类型转换

    • 泛型的一个附带好处是,使用时直接得到目标类型,消除许多强制类型转换
    • 所得即所需,这使得代码更加可读,并且减少了出错机会
  3. 潜在的性能收益

    • 由于泛型的实现方式,支持泛型(几乎)不需要 JVM 或类文件更改
    • 所有工作都在编译器中完成
    • 编译器生成的代码跟不使用泛型(和强制类型转换)时所写的代码几乎一致,只是更能确保类型安全而已
// 经典案例
// 会抛出类型转换异常 java.lang.ClassCastException: class java.lang.Integer cannot be cast to class java.lang.String
public static void main(String[] args) {
        List list = new ArrayList<>();
        list.add("123");
        list.add(123);
        for (int i = 0;i< list.size();i++){
            String value = (String) list.get(i);
            System.out.println(value);
        }
    }
二、泛型的概念

​ “泛型” 意味着编写的代码可以被不同类型的对象所重用。泛型的提出是为了编写重用性更好的代码。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数

​ 类型参数列表

三、泛型的常规用法
  1. 泛型类(在类名后加上类型参数列)

    public class DomeGeneric<T> {
        private T value;
        private T[] ValueArray;
    
        public static void main(String[] args) {
            DomeGeneric<String> stringDemo = new DomeGeneric<>();
            stringDemo.setValue("111");
            stringDemo.setValueArray(new String[]{"1","2"});
            System.out.println(stringDemo.toString());
            // 输出DomeGeneric{value=111, ValueArray=[1, 2]}
        }
        // 省略get set toString方法
    }
    
  2. 泛型接口(在接口名后加上类型参数列)

    public interface DomeGenericInterface<T> {
        void doSomeThing(T t);
    }
    

    注意的是在实现泛型接口事一定要实现类型参数的具体类型,不然没有什么意义

  3. 泛型方法(介于方法修饰符和返回值之间的称作类型参数列表<M,N>(可以有多个))

    public class DomeGenericMethod {
    
        public <E> List<E> doSomething(List<E> listOne,List<E> listTwo){
            List listResult = new ArrayList(listOne);
            listResult.addAll(listTwo);
            System.out.println(listResult);
            return listResult;
        }
    }
    

小贴士

​ 声明一般类型的参数类型使用的是,一般的集合类型默认,键值对使用的是<K,V>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值