问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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&lt;T {public Parent() {ParameterizedType type = (ParameterizedType)this.getClass(...

java中如何得到泛型参数的class?

泛型的类型是无法在运行时通过反射取得的,泛型类型在编译成字节码的时候已经被虚拟机给去掉了,只是起到提示编译器进行类型检查的作用 用这种方法你试一试:父类:import java.lang.reflect.ParameterizedType;public class Parent&lt;T { public Parent() { ParameterizedType type = (ParameterizedType)this.get...

java中如何得到泛型参数的class?

} 你想要的应该是这个吧,只要取出来就是你定义类型的object了,在这个例子中是string。如果你给它定义的是integer类型的泛型的话,取出来就是integer了。

Java中定义泛型&lt;T&gt;时,怎么获得泛型的类型

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&lt;T&gt; { public static void main(String[] args) { Genericity&lt;String&gt; test = new Genericity&lt;&gt;("test1");System.out.println(test.getGenericityName());Genericity&lt;Double&gt; test1 = new Genericity&lt;&gt;(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&lt;T&gt; 中 T 的类型* @param clazz* @param field* @return*/public static Class&lt;? extends Object&gt; getGenericType(Class&lt;? extends Object&gt; clazz, Field field){Method getMethod = getGetMethodByField(clazz,field);...

java中获取泛型的实际类型,请问如何做? (请不要简单的说要用反射机制...

public void showType(){ System.out.println(T.getClass().getName());} 这个T是泛型,这直接用是不能的,它只能用于类声明(你的例子),类变量声明,方法声明和参数声明。其实只用getClass()就够了 完善下你的类如下 class A&lt;T&gt;{ T tt;A(T t){ this.tt = t;} public void show...

java泛型类如何取得泛型 java中的泛型类list java泛型作为参数 java传入泛型参数 java泛型类和泛型方法 Java泛型参数 java泛型类型 java泛型数组 java泛型默认类型
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
小米6X怎么把应用转到分身里去。 电脑开机时风扇都能转,就是显示屏显示无视屏输入。重启也没有用 我的电脑开机后只有风扇会转其它都没反应这是怎么回事 二十岁了女生还可以长高吗求大神帮助 二十岁了 还有可能长高吗?有什么方法??? ...说玛卡巴卡的意思 男生说晚安玛卡巴卡是什么意思 男生发晚安玛卡巴卡什么意思 法式碎花裙怎样搭配才能展现出优雅知性的美感? 早秋有哪些随性慵懒的法式风穿搭思路值得借鉴? 法式风格的红裙如何搭配才能凸显出高级感? Java问题,泛型问题,通过实例对象获取T的类型如:public class Base&lt;T&gt;{} 菲力尔红外热像仪,价格贵吗? 如何获得当前类的字段,方法参数泛型的类型 java中获取泛型的实际类型,请问如何做? (请不要简单的说要用反射机制哈,描述下具体如何实施) 如何通过反射获得java类中泛型T的类型 java获取泛型 怎么获取一个泛型List的元素类型 java怎么获取一个泛型方法的真实泛型类型 java 如何获得List的泛型类型 软件破解问题 java如何获得泛型中的类 如何获取继承类中的泛型T的类型 我们的厂房和人合伙租用。当初说好不能转让。只能合伙。现在补一个合同。关于退伙合同怎么写。 java中 如何得到泛型参数的类型,并在另一个方法中使用 如何获取java泛型的参数类型 如何反射获取List&lt;T&gt; 中泛型的类型 如何取得java泛型里的类型 如何获取 java 的泛型中的对象类型 如何取得泛型类实例的泛型类型? 我家美的冰箱出水孔周围结冰是什么原因 菲力尔 fluke 红外热像仪 哪个好 什么牌子的红外热像仪质量好? 美国菲力尔红外热像仪是怎么使用的 菲力尔310是什么 菲力尔红外热像仪荧屏英文怎么变回中文 菲力尔红外热像仪官网非力尔热成像仪K40的充电器损坏了,购买配件需要找谁?购买充电器加底座。需要多_百度问一问 问: 菲力尔flir i7红外热成像仪怎么拆嘛,现在屏幕黑屏别的都正常怀疑排线,最好有图对照 有热成像仪推荐吗?谢谢了。 中国制造测温枪厂家? 求,菲力尔E50红外热像仪中文版使用说明书!高分 请问一下家里的总闸推上去但是里面还是没有电,是怎么回事,在线等,急 家里停电闸刀推下来上线有电闸刀推上去都没电原因是什么 电路跳闸了,把总开关推上去还是没电是怎么回事 家里跳闸了推上去部分房间和插头还是没电怎么办 如何取消IE浏览器的自动更新功能? 如何把IE的默认浏览器自动检查关掉 怎么取消IE浏览器的更新提醒 IE8每次打开浏览器都显示要求更新!注意是每次!怎么能让它不显示更新! 局域网win7怎么取消ie自动检测 急急急!!!华硕z87a和z87k的区别!!!