zoukankan      html  css  js  c++  java
  • 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[]" 上都能指定这种新类型

  • 相关阅读:
    Java(14):面向对象、封装、继承、方法重写、多态、抽象类与接口、内部类
    Java(13):数组、Arrays类、冒泡排序
    Java(12):方法、重载、命令行传参、可变参数、方法调用
    Java(11):switch、dowhile、九九乘法表、打印质数、打印三角形
    Java(10):用户交互Scanner
    Java(9):包
    Java(8):运算符
    Java(7):变量和常量及其规范、作用域
    Mybatis 打印日志
    mysql 更新数据
  • 原文地址:https://www.cnblogs.com/ptw-share/p/6930170.html
Copyright © 2011-2022 走看看