• java泛型


    泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数

    引入泛型的好处是安全简单。可以将运行时错误提前到编译时错误。没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是一个安全隐患。

    在泛型接口、泛型类和泛型方法的定义过程中,我们常见的如T、E、K、V等形式的参数常用于表示泛型形参

    1、实例的类型是相同的

    Box<String> name = new Box<String>("1");

    Box<Integer> age = new Box<Integer>(2);

    System.out.println("name class:" + name.getClass()); // com.qqyumidi.Box
    System.out.println("age class:" + age.getClass()); // com.qqyumidi.Box
    System.out.println(name.getClass() == age.getClass()); // true

    泛型类型在逻辑上看以看成是多个不同的类型,实际上都是相同的基本类型

    2、类型通配符

    类型通配符一般是使用 ? 代替具体的类型实参。

    注意了,此处是类型实参,而不是类型形参!且Box<?>在逻辑上是Box<Integer>、Box<Number>...等所有Box<具体类型实参>的父类,例如:

    public static void getData(Box<?> data) {

     System.out.println("data :" + data.getData());

    }

    参数类型可以是任何Box<具体类型实参>

    3、类型通配符上下限

    将上面的方法改造下

    public static void getData(Box<? extends Number> data) {

     System.out.println("data :" + data.getData());

    }

    这时,参数类型就只能是具体类型为Number或子类的了,例如:Box<Integer>,Box<Number>等

    4、定义新类型

    <T> T[] toArray(T[] a)

    <T>定义了一种新类型,这样在返回类型"T[]" 和 参数类型"T[]" 上都能指定这种新类型

  • 相关阅读:
    C#语法糖(Csharp Syntactic sugar)大汇总
    js+JQuery实现返回顶部功能
    【深入ASP.NET原理系列】--ASP.NET页面生命周期
    扩展类
    c# 扩展方法奇思妙用
    常用excel技巧
    SQL Server之数据库语句优化
    SQL Server 聚合函数算法优化技巧
    十步完全理解SQL
    SQL语句统计每天、每月、每年的数据
  • 原文地址:https://www.cnblogs.com/ptw-share/p/6930170.html
Copyright © 2020-2023  润新知