「java获取泛型类型」java 获取泛型

博主:adminadmin 2023-03-19 02:20:09 393

本篇文章给大家谈谈java获取泛型类型,以及java 获取泛型对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

Java中定义泛型时,怎么获得泛型的类型

T.getClass()或者T.class都是非法的,因为T是泛型变量。

由于一个类的类型是什么是在编译期处理的,故不能在运行时直接在Base里得到T的实际类型。

有一种变通的实现方式:

import java.lang.reflect.Array;

import java.lang.reflect.ParameterizedType;

import java.lang.reflect.Type;

public class Generic extends BaseString {

public static void main(String[] args) {

Generic c = new Generic();

System.out.println(c.array);

}

Object array ;

public Generic() {

array = Array.newInstance(getGenericType(0), 100);

}

}

class BaseT {

public Class getGenericType(int index) {

Type genType = getClass().getGenericSuperclass();

if (!(genType instanceof ParameterizedType)) {

return Object.class;

}

Type[] params = ((ParameterizedType) genType).getActualTypeArguments();

if (index = params.length || index 0) {

throw new RuntimeException("Index outof bounds");

}

if (!(params[index] instanceof Class)) {

return Object.class;

}

return (Class) params[index];

}

}

其中BaseT是泛型类,在父类中声明getGenericType,子类继承具体的BaseString,那么在子类中就可以通过getGenericType(0)获取到String的class.

如何获取 java 的泛型中的对象类型

class Human {

public String toString() {

return "This is human";

}

}

class Man extends Human {

public String toString() {

return "This is man";

}

}

class Woman extends Human {

public String toString() {

return "This is woman";

}

}

public class GetObj {

/**

 * 获取泛型的对象类型

 * 

 * @param obj

 *            泛型对象

 */

public static T void showInstance(T obj) {

try {

Object tmpObj = obj.getClass().newInstance();// 实例化泛型对象

if (tmpObj instanceof Human) {// Human的对象

System.out.println(tmpObj);

} else if (tmpObj instanceof Man) {// Man的对象

System.out.println(tmpObj);

} else {// Woman的对象

System.out.println(tmpObj);

}

} catch (Exception e) {

e.printStackTrace();

}

}

public static void main(String[] args) {

Human h = new Human();

showInstance(h);

Man m = new Man();

showInstance(m);

Woman w = new Woman();

showInstance(w);

}

}

如何在运行时获取泛型的类型

在父类的构造方法中,获取泛型的具体类型

import java.lang.reflect.ParameterizedType;

import java.lang.reflect.Type;

import com.opensymphony.xwork2.ModelDriven;

/**

* 工具类直接返回ModelDriven的对象

*/

public class ModelBaseActionT extends BaseAction implements ModelDrivenT {

protected T model;

/**

* 通过反射,获取泛型的具体类型并实例化这个类型

*/

public ModelBaseAction() {

// 获取反射的类型

java.lang.reflect.Type cls = super.getClass().getGenericSuperclass();

if (cls instanceof ParameterizedType) {

ParameterizedType pt = (ParameterizedType) cls;

// 获取所有放到泛型里面的类型

Type[] tps = pt.getActualTypeArguments();

System.err.println(tps[0].getTypeName());

try {

// 实例化这个泛型所代表的类对象

model = (T) Class.forName(tps[0].getTypeName()).newInstance();

} catch (Exception e) {

throw new RuntimeException("没有默认构造方法", e);

}

}

}

@Override

public final T getModel() {

return model;

}

}

java中 如何得到泛型参数的类型,并在另一个方法中使用

Java的泛型就是创建一个用类型作为参数的类。就象我们写类的方法一样,方法是这样的method(String str1,String str2 ),方法中参数str1、str2的值是可变的。而泛型也是一样的,定义泛型 一般用 T 表示. public T ListT method(T t){ 方法体} 。它的参数 就是 T 一个类型,你传什么类型的对象,T就是什么类型。

T将是 可变的类型。

java获取泛型class

很多朋友都想知道java怎么获取泛型class?下面就一起来了解一下吧~

获取泛型Class的方法

Class类的方法:

public Type getGenericSuperclass()

方法作用:

如果超类是参数化类型,则返回的 Type 对象必须准确反映源代码中所使用的实际类型参数。如果以前未曾创建表示超类的参数化类型,则创建这个类型。有关参数化类型创建过程的语义,请参阅 ParameterizedType 声明。如果此 Class 表示 Object 类、接口、基本类型或 void,则返回 null。如果此对象表示一个数组类,则返回表示 Object 类的 Class 对象。

ParameterizedType类的方法:

Type[] getActualTypeArguments()

方法作用:返回表示此类型实际类型参数的 Type 对象的数组。

注意,在某些情况下,返回的数组为空。如果此类型表示嵌套在参数化类型中的非参数化类型,则会发生这种情况。

二、获取泛型Class对象

(解析Excel的类代码较多,这里定义几个简单的类记录)

定义获取泛型Class对象的工具类

GenericSuperclassUtil

import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; public class GenericSuperclassUtil { /* * 获取泛型类Class对象,不是泛型类则返回null */ public static Class  getActualTypeArgument(Class  clazz) { Class  entitiClass = null; Type genericSuperclass = clazz.getGenericSuperclass(); if (genericSuperclass instanceof ParameterizedType) { Type[] actualTypeArguments = ((ParameterizedType) genericSuperclass) .getActualTypeArguments(); if (actualTypeArguments != null  actualTypeArguments.length  0) { entitiClass = (Class ) actualTypeArguments[0]; } } return entitiClass; } }

定义BaseService ,用来测试不使用父类时泛型Class的获取

BaseService

public class BaseService  { public Class  getEntityClass() { return GenericSuperclassUtil.getActualTypeArgument(this.getClass()); } }

测试BaseService.getEntityClass() @Testpublic void testBaseService() { System.out.println(new BaseService ().getEntityClass());// 控制台输出:null }

java怎么获取一个泛型方法的真实泛型类型

不知道我对你的题目的理解对不对:有个方法返回一个 泛型 ,你想去这个 泛型 的类型是不是?

package test;

import java.util.ArrayList;

import java.util.List;

public class Test01 {

public static void main(String[] args) {

ListString strings = new ArrayListString();

strings.add("123");//模拟返回一个泛型

System.out.println(strings.getClass());//第一次取类型

System.out.println(strings.get(0).getClass());//假如通过第一步知道是ArrayList类型,则再取类型

}

}

输出结果:

class java.util.ArrayList

class java.lang.String

这里只举例讲一下方法,不知道是不是你想要的,

java获取泛型类型的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java 获取泛型、java获取泛型类型的信息别忘了在本站进行查找喔。