泛型及其高阶应用

初识泛型的应用

作用对输入的内容加以约束

格式< 类型形参>

什么是泛型

  • 所谓泛型,就是允许在定义类、接口、方法时使用类型形参(泛型),这个类型形参将在声明变量、创建对象、调用方法时动态地指定,进而让程序具备编译时检查能力
  • 泛型是JDK1.5提供的特性,最常见的泛型应用场景便是在使用集合时通过泛型指定集合内对象的类型,为程序代码提供了编译是纠错的能力

自定义泛型类

自定义泛型类,需要在类名后增加"< 标识符>"

public class SampleClass<T>{...}

< T>与< E>的区别

  • 标识符的字母本身并无强制要求,常见写法有两种:
  • < T>是Type单词的首字母,说明传入的是类型
  • < E>是Element元素的首字母,代表是集合中的元素

Random 生成随机数的类 其中的nextInt()方法时随机生成一个指定范围内的整数

//实现随机选择List中的元素
public class CollectionUtils<E> {
    private List<E> data = new ArrayList();
    public void add(E element){
        data.add(element);
    }
    public E randomSelect(){
        int idx = new Random().nextInt(data.size());
        E ret = data.get(idx);
        return ret;
    }
    public static void main(String[] args) {
        CollectionUtils<String> utils = new CollectionUtils();
        utils.add("张三");
        utils.add("李四");
        utils.add("王五");
        utils.add("赵六");
        String name = utils.randomSelect();
        System.out.println(name);
    }
}

泛型方法

  • JDK1.5以后还提供了泛型方法的支持,允许在类没有声明泛型的前提下让方法独立使用泛型进行开发

    public <T> List<T> transferToList(T[] array){
        
    }
    

实例

transferToList()将传入的数组转换为List

这里泛型的作用就是强制要求返回值里的类型和传入参数的类型一致

public class PtMethod {
    //泛型方法,要求返回值类型与参数类型保持一致
    public <T> List<T> transferToList(T[] array){
        List<T> list = new ArrayList();
        for(T item : array){
            list.add(item);
        }
        return list;
    }

    public static void main(String[] args) {
        PtMethod ptMethod = new PtMethod();
        String[] array = new String[]{"A", "B", "C", "D", "E"};
        List<String> list = ptMethod.transferToList(array);
        System.out.println(list);

    }
}

泛型通配符

  • 当明确指定泛型类型后,就必须强制使用该类型传入,该类型的子类也会报"类型不匹配"错误
  • 为了增加泛型的匹配范围,泛型通配符< ?> 应运而生

< ?>通配符与匹配范围

< ?>代表所有类型均可传入

通过extenfs与super限定范围

extends关键字代表必须传入Shape或者子类才通过检查

//方法定义:
public void doSth(List< ? extends Shape> shapeList)

super关键字代表必须传入Rectangle或者其父类才能通过检查

//方法定义:
public void doSth(List < ? super Rectangle>shapeList)
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1. 泛型概述 泛型为JDK1.5之后sun公司推出的新功能,泛型可以消除源代码中的许多强制类型转换,泛型对于数据...
    yuan_dongj阅读 4,546评论 0 8
  • 小伙伴你好~欢迎进入泛型的学习,在学习之前友情提醒一下:学习泛型需要各位小伙伴们具备一定的 javaSE基础,如果...
    闪电侠阅读 339评论 1 1
  • 14.1 泛型与集合 JDK1.5增加了泛型支持。增加泛型后的集合,可以让代码更加简洁,程序更加健壮。Ja...
    王毅巽阅读 576评论 0 0
  • @[toc] 1.泛型概述 在Thinking in java 第五版的第二十章中,开篇说到,在普通的类和方法中只...
    冬天里的懒喵阅读 1,187评论 0 0
  • 一、学习目标 1.泛型的作用和定义 2.泛型的基本使用 3.泛型中的通配符 4.泛型擦除 5.泛型中的约束和局限 ...
    Heezier阅读 331评论 0 1

友情链接更多精彩内容