泛型的使用

 泛型的运用:

  需求:

           定义一个方法,可以接受任意数据类型,而且要求返回的数据类型,就是你传入的数据类型

  例如:

           传入String,返回String

            传入Demo3类型,返回Demo3类型

  泛型:

           占位符!!!<一个大写字母>,只是一个占位符,没有实际含义,而且不同地方定义的占位符没有联系

  泛型在函数中使用的格式

  修饰符 <声明的自定义泛型占位符> 返回值类型(可以使用自定泛型) 函数名(形式参数列表"也可以使用泛型") {

  函数体

  在函数体中,所有用到自定义泛型的地方,都可以被替换

  }

  包装类

  Java是完全面向对象的语言,在Java中万物皆对象,如果是要保存类对象,那么8大基本数据类型就无法使用所以,Java提供了一个包装机制,包装基本数据类型,让他们变成类对象,

  自动封箱

  Integer -> int

  Byte -> byte

  Long -> long

  Short -> short

  Double -> double

  Float -> float

  Boolean -> boolean

  Character -> char


  如果使用包装类直接赋值给普通的基本数据类型,这个操作称之为 拆箱

在类内使用泛型

格式:

class 类名<自定义泛型的占位符> {

//在这里所用到的泛型和用户创建对象时声明的一致

}

注意事项:

1. 一个类声明的自定义泛型,如果在创建该类对象时,确定了泛型的具体数据类型,那么

在整个类内所有用到该泛型占位符的非静态成员方法,使用的数据类型都是创建时确定的类型

2. 如果创建使用了自定义泛型类对象,但是没有确定泛型的具体类型,那么编译器会把这个

泛型认为是Object类型

3. 类中声明的自定义泛型,不能对类内的静态方法使用,如果想让静态方法使用泛型, 自娱自乐

自己声明,自己使用,类似方法中使用泛型

4. 建议:如果在代码中出现了多个使用不同泛型的地方,请使用不同的名字 T E

在接口中定义泛型

格式 :

interface 接口名<自定义泛型的占位符> {

//成员变量  缺省属性:public static final 定义时必须初始化

//成员方法  缺省属性:abstract

}

两种【遵从】带有自定义泛型的接口方式:

1. 更加自由,需要使用的泛型类型,在创建对象时确定,类似ArrayList

2. 适合原本这个类就没有使用泛型的情况,例如:一个类遵从Comparable接口

事项compareTo方法,这里可以在【遵从】时,确定Comparable需要的泛型

具体数据类型,减少没有必要的强制类型转换

 泛型的上下限

T 泛型的占位符

? 通配符

super: 调用父类方法的关键字

extends: 继承的关键字

需求:定义一个函数接受任意类型数值的集合,但是这个数据必须是数值类型

数值类型:Number 已知子类:Integer Short Long Double Float (包装类)

要求传入的对象是Number类对象或者其子类对象

Integer extends Number;

Float extends Number;

Double extends Number;

? extends Number;

这就是泛型的上限:

需求:定义一个函数能够传入一个任意类型的集合,但是要求集合里面保存的数据必须是Number类对象,或者其父类对象

泛型的下限

能够保存的数据是Number类对象本身或者其父类对象

你可能感兴趣的:(泛型的使用)