二刷java基础第十六天——泛型和类型通配符

Posted 名字真的很急用

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二刷java基础第十六天——泛型和类型通配符相关的知识,希望对你有一定的参考价值。

什么是泛型

  • 泛型实际的含义就是任意类型(Object)
  • 泛型是jdk5引入的新特性,为了提高编译时期的类型安全检测机制
  • E V K :指的就是任意类型
  • <> :泛指
  • <内容>:类型
  • 泛指类型 :泛型

2:泛型的优点

  • 可以将运行时的异常提前到编译时
  • 避免了数据类型的强制转换

定义泛型类

定义格式

class 类名<类型>{}

定义泛型方法

修饰符 <类型> 返回值类型 方法名(类型  变量名){}

定义泛型接口

修饰符 interface 接口名<类型>{}

同一个文件中,只能有一个public

类型的通配符

<?> :可以匹配任意的类型
类型通配符上限:<? extends Number>
他表示的是类型是Number或者是子类类型
类型通配符的下限: <? super Number>
他表示的是类型NumberNumber父类

泛型:泛型类型在逻辑上看以看成是多个不同的类型,实际上都是相同的基本类型。
泛型有三种使用方式,分别为:泛型类、泛型接口、泛型方法
//此处T可以随便写为任意标识,常见的如T、E、K、V等形式的参数常用于表示泛型

//在实例化泛型类时,必须指定T的具体类型
public class Generic<T>{ 
    //key这个成员变量的类型为T,T的类型由外部指定  
    private T key;
public Generic(T key) { //泛型构造方法形参key的类型也为T,T的类型由外部指定
    this.key = key;
}

public T getKey(){ //泛型方法getKey的返回值类型为T,T的类型由外部指定
    return key;
}

}
泛型的类型参数只能是类类型,不能是简单类型。

不能对确切的泛型类型使用instanceof操作。如下面的操作是非法的,编译时会出错。

if(ex_num instanceof Generic<Number>){   
} 

未传入泛型实参时,与泛型类的定义相同,在声明类的时候,需将泛型的声明也一起加到类中

 * 即:class FruitGenerator<T> implements Generator<T>{
 * 如果不声明泛型,如:class FruitGenerator implements Generator<T>,编译器会报错:"Unknown class"
 */

当使用泛型类或者接口时,传递的数据中,泛型类型不确定,可以通过通配符<?>表示。
但是一旦使用泛型的通配符后,只能使用Object类中的共性方法,集合中元素自身方法无法使用。

泛型的通配符:不知道使用什么类型来接收的时候,此时可以使用?,?表示未知通配符

通配符高级使用----受限泛型
之前设置泛型的时候,实际上是可以任意设置的,只要是类就可以设置。但是在JAVA的泛型中可以指定一个泛型的上限和下限。

泛型的上限:
格式: 类型名称 <? extends 类 > 对象名称
意义: 只能接收该类型及其子类

泛型的下限:
格式: 类型名称 <? super 类 > 对象名称
意义: 只能接收该类型及其父类型

以上是关于二刷java基础第十六天——泛型和类型通配符的主要内容,如果未能解决你的问题,请参考以下文章

java里的泛型和通配符

Java泛型和通配符那点事

java基础第十六天_GUI/socket

Java自学第十六天

Java泛型和内部类

IT十八掌作业_java基础第十六天_GUI/socket