Java——泛型

xiaoxiao2021-02-28  124

泛型就像一个模板,编写好的代码可以被很多不同类型的对象重用。解决的问题就是滥用Object类型变量,然后强转。

如何自定义一个泛型类呢? 泛型类就是具有一个或多个类型变量的类,典型的就是ArrayList,经常用到。

public class Gen<T>{ private T first; private T second; public Gen(){} public Gen(T first,T second){this.first=first;this.second=second;} public T getFirst(){return first;} public void setFirst(T value){first=value;} }

在类名后面加上< T>即可,在java库中E表示集合的元素类型,K表示表的键类型,V表示值类型。T表示任意类型(还可以使用U或S)。 泛型方法 上面的get,set就是泛型方法,不局限于泛型类中,也可以定义在普通类中。 类型限制 如果要对类型变量进行限制,通过T来设置就行。如:

public static <T extends Comparable & Serivalizable> T method(){...}

这样写就表示T必须是他们的子类才可传入。 底层原理 在虚拟机中是没有泛型概念的,不管你定义的是什么泛型类,都会翻译成原始类型(如果有限定就是限定类型,没有限定就是Object类型),当我们去调用泛型方法时,编译器插入强制类型转换,也就是说编译器会将返回的Obejct类型,强转为我们定义的类型。 通配符 Gen< ? extends Comparable> 更高深的用法:

public < T extends Comparable< ? super T>> T method(){...}

注意 1.不能用基本类型实例化类型参数;比如Gen< double>是错误的,原因就是Object不能存储double值,但可以用Gen< Doubel>。 2.不能创建参数化类型的数组 如Gen< String> t=new Gen< String>[10];是错误的。 3.不能构造泛型数组。

转载请注明原文地址: https://www.6miu.com/read-57539.html

最新回复(0)