专注Java教育14年 全国咨询/投诉热线:400-8080-105
动力节点LOGO图
始于2009,口口相传的Java黄埔军校
首页 学习攻略 Java泛型有哪些?怎么用?

Java泛型有哪些?怎么用?

更新时间:2020-08-04 16:38:23 来源:动力节点 浏览1832次

泛型接口和类

泛型类和接口上面已经演示过了,定义方式类似class A;这样。需要注意一点,在实现泛型接口时可以选择传入泛型实参或者不传实参,传入实参时实现类不需要声明为泛型,实现类中所有使用泛型的地方都要转为实参。不传入实参时,实现类也要声明为泛型。

泛型方法

泛型方法能够使方法独立与类而产生变化,Java编程思想一书中有一个指导原则,无论何时,只要能做到,就应该尽量使用泛型方法。也就是说,如果使用泛型方法可以取代将整个类泛型化,那么就应该只使用泛型方法。另外,对于一个static的方法而言,无法访问泛型类的类型参数,所以,如果static方法需要使用泛型能力,就必须使其成为泛型方法。

看一个简单例子:

Java泛型有哪些?怎么用?

首先上面这个类是普通类,并不是一个泛型类。这个类有一个泛型方法,这个方法可以静态的也可以是静态的,我这里选择用静态方法。方法get很简单,就是打印出参数的类型。在定义方法的时候,并不知道要传入的方法类型,只有在编译时期根据传入的参数类型,可以推断出泛型的实参,例如传入的1,编译器可以推断出泛型参数类型为Integer,传入“1”,编译器可以推断出泛型参数类型为String,传入1.0编译器可以推断出泛型参数类型为Double。这个叫做参数类型推断。

看下上面代码执行结果:

Java泛型有哪些?怎么用?

代码的执行结果证明了泛型方法不需要显式的指明参数类型,可以推断参数类型。类型推断只对赋值操作有效,其他时候并不起作用。如果你将一个泛型方法调用的结果(例如New.map())作为参数,传递给另一个方法,这时编译器并不会执行类型推断。

综上所述,当使用泛型类时候,必须在创建对象的时候指定类型的参数值,而使用泛型方法的时候,通常不必指明参数类型,因为编译器会找出具体的类型。

通配符

在定义泛型过程中会经常遇到不同的通配符,例如T,E,K,V,?等,这些其实没什么区别,但是默认情况下有一些约定:

T表示一个java类型。

E表示元素Element,表示容器中的元素。

K V(key Value)分别代表java键值中的Key Value。

?表示不确定的java类型。

通配符一般可以分为无界通配符,上界通配符和下界通配符。

定义方式如下:

Java泛型有哪些?怎么用?

但是上界通配符和下届通配符是具有局限性的。在上图的list中,上界通配符定义的list只能get数据,且类型为Fruit,add的时候会报错。下界通配符定义的list只能add数据,get数据返回的只能是object,详细信息会全部丢失。

以上就是动力节点java培训机构的小编针对“Java泛型有哪些?怎么用?”的内容进行的回答,希望对大家有所帮助,如有疑问,请在线咨询,有专业老师随时为你服务。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>