java中如何得到泛型参数的class?
发布网友
发布时间:2022-04-30 01:57
我来回答
共2个回答
好二三四
时间:2022-06-10 17:17
<link rel="stylesheet" href="https://js.how234.com/third-party/SyntaxHighlighter/shCoreDefault.css" type="text/css" /><script type="text/javascript" src="https://js.how234.com/third-party/SyntaxHighlighter/shCore.js"></script><script type="text/javascript"> SyntaxHighlighter.all(); </script>
很多朋友都想知道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<E>,用来测试不使用父类时泛型Class的获取
BaseService<E>
public class BaseService<E> {
public Class<?> getEntityClass() {
return GenericSuperclassUtil.getActualTypeArgument(this.getClass());
}
}
测试BaseService.getEntityClass()
@Testpublic void testBaseService() {
System.out.println(new BaseService<User>().getEntityClass());// 控制台输出:null
}
以上就是小编今天的分享,希望可以帮到大家。
热心网友
时间:2022-06-10 14:25
泛型的目的就是为了避免强制类型转换,所以直接取出来就是object的类型了。
public
class
classtest
{
public
static
void
main(string[]
args)
{
list
liststr
=
new
arraylist
();
liststr.add("aaa");
liststr.add("bbb");
system.out.println(liststr.get(0));
}
}
你想要的应该是这个吧,只要取出来就是你定义类型的object了,在这个例子中是string。如果你给它定义的是integer类型的泛型的话,取出来就是integer了。
java中如何得到泛型参数的class?
public class GenericParameterizedTypeDemo { public static void main(String[] args) throws Exception { //通过反射获取到方法 Method declaredMethod = GenericParameterizedTypeDemo.class.getDeclaredMethod("findStr", int.class,Map.class); //获取到方法的参数列表 Type[] parameterTyp...
java中如何得到泛型参数的class?
泛型的类型是无法在运行时通过反射取得的,泛型类型在编译成字节码的时候已经被虚拟机给去掉了,只是起到提示编译器进行类型检查的作用用这种方法你试一试:父类:import java.lang.reflect.ParameterizedType;public class Parent<T {public Parent() {ParameterizedType type = (ParameterizedType)this.getClass(...
java中如何得到泛型参数的class?
泛型的类型是无法在运行时通过反射取得的,泛型类型在编译成字节码的时候已经被虚拟机给去掉了,只是起到提示编译器进行类型检查的作用 用这种方法你试一试:父类:import java.lang.reflect.ParameterizedType;public class Parent<T { public Parent() { ParameterizedType type = (ParameterizedType)this.get...
java中如何得到泛型参数的class?
} 你想要的应该是这个吧,只要取出来就是你定义类型的object了,在这个例子中是string。如果你给它定义的是integer类型的泛型的话,取出来就是integer了。
Java中定义泛型<T>时,怎么获得泛型的类型
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 ...
java 如何获取 泛型的 class
public class Genericity<T> { public static void main(String[] args) { Genericity<String> test = new Genericity<>("test1");System.out.println(test.getGenericityName());Genericity<Double> test1 = new Genericity<>(new Double(123));System.out.println(test1.getGenericityName());} ...
如何在运行时获取泛型的类型
通过反射,获取泛型的具体类型并实例化这个类型 / public ModelBaseAction() { // 获取反射的类型 java.lang.reflect.Type cls = super.getClass().getGenericSuperclass();if (cls instanceof ParameterizedType) { ParameterizedType pt = (ParameterizedType) cls;// 获取所有放到泛型里面的类型 Type[...
Java获取泛型对象中的某个属性值
首先做一个接口,接口中声明需要的取值方法 然后做你要的实际的类,每个类实现不同的取值方法 然后list通过接口进行定义,将每个实际类的对象insert到list中间 然后利用多态实现动态的方法绑定,实现你的需求
如何获取 java 的泛型中的对象类型
获取java泛型中的对象类型,可以参考如下代码:/*** 通过反射取到 List<T> 中 T 的类型* @param clazz* @param field* @return*/public static Class<? extends Object> getGenericType(Class<? extends Object> clazz, Field field){Method getMethod = getGetMethodByField(clazz,field);...
java中获取泛型的实际类型,请问如何做? (请不要简单的说要用反射机制...
public void showType(){ System.out.println(T.getClass().getName());} 这个T是泛型,这直接用是不能的,它只能用于类声明(你的例子),类变量声明,方法声明和参数声明。其实只用getClass()就够了 完善下你的类如下 class A<T>{ T tt;A(T t){ this.tt = t;} public void show...