Java泛型是参数化类型,也就是说所操作的数据类型被指定为一个参数(type parameter)这种参数类型可以用在类、接口和方法的创建中,那java泛型类如何取得泛型?下面来我们就来给大家讲解一下。
获得泛型类的形式参数:
Java中提供了Class接口用于描述类的运行时信息。此外,还提供了Type接口用于描述类的类型信息。Type接口有多个子类,包括Class、TypeVariable、ParameterizedType等,分别表示运行时类、类参数、参数化类型。获得泛型类的形式参数代码如下:
ArrayListarrayList = new ArrayList(); TypeVariable[] typeVariables = arrayList.getClass() .getTypeParameters(); System.out.println(Arrays.toString(typeVariables)); // E
利用Class类中的getTypeParameters()方法可以获得描述形式参数的TypeVariable数组。
获得泛型类的实际参数
v实际上,泛型类的实际参数是不可获取的,因为在运行期进行了类型擦除。但有一种情况,可以简介获取泛型类的实际参数,代码如下:
ArrayListarrayList = new ArrayList() { /** * */ private static final long serialVersionUID = 1 L; }; Type type = arrayList.getClass() .getGenericSuperclass(); ParameterizedType parameterizedType = (ParameterizedType) type; for (Type t: parameterizedType.getActualTypeArguments()) { System.out.println(t.getTypeName()); // java.lang.Integer }
注意,代码中创建了一个匿名内部了对象arrayList。通过它的getClass()方法获得了匿名内部类对应的Class对象,再借助getGenericSuperClass()方法获得泛型父类的类型信息。
java泛型怎么使用?
1、泛型类和泛型接口
如果定义的一个类或接口有一个或多个类型变量,则可以使用泛型。泛型类型变量由尖括号界定,放在类或接口名的后面,下面定义尖括号中的T称为类型变量。意味着一个变量将被一个类型替代替代类型变量的值将被当作参数或返回类型。对于List接口来说,当一个实例被创建以后,T将被当作一个函数的参数下面分别是泛型类、泛型接口的定义:
public class Gen { /泛型类…… } public interface Listextends Collection { //泛型接口 ……}
2、泛型方法
是否拥有泛型方法,与其所在的类是否泛型无关。
要定义泛型方法,只需将泛型参数列表置于返回值前。
如:
public class ExampleA { public < > voidf(Tx) { System.out.println(x.getClass() .get Name()); } publiec static void main(String args[]) { ExampleA ea = new ExampleA(); ea - f(""); ea.f(10); ea.f(a); ea.f(ea); } }
使用泛型方法时,不必指明参数类型,编译器会自己找出具体的类型。泛型方法除了定义不同,调用就像普通方法一样。需要注意,一个static方法,无法访问泛型类的类型参数,所以,若要static方法需要使用泛型能力,必须使其成为泛型方法。
Java语言中引入泛型是一个较大的功能增强,能够提高Java程序的类型安全,并且还可以消除源代码中的许多强制类型转换,减少代码出错的机会。最后大家如果想要了解更多java初识知识,敬请关注奇Q工具网。
推荐阅读: