导航:首页 > 编程语言 > java泛型获取属性

java泛型获取属性

发布时间:2023-07-04 07:09:40

java获取泛型


这段代码放在BaseDaoImpl中,在for循环中打印的t就是T和PK。

最后得到的persistType就是T的实际类型。


解释一下红色的部分:

因为this代表你的实例,

如果这个实例是(用Integer做ID的Student数据对象为例)

BaseDaoImpl<Student, Integer>studentDao=new BaseDaoImpl<Student, Integer>();

这个实例的“范型父类”(getGenericSuperclass)就是BaseDao<Student, Integer>,

如果你的实例是BaseDaoImpl<T, PK>子类的实例,

那么“范型父类”就是BaseDaoImpl<T, PK>,

反正不是HibernateDaoSupport,因为HibernateDaoSupport不带范型。

最后,不管是BaseDaoImpl,还是BaseDao,getActualTypeArguments()都得到Class数组,内容是{T的类型,PK的类型},取第一个(下标0),就得到T的类型(例中为Student.class)。

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

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

packagetest;

importjava.util.ArrayList;
importjava.util.List;

publicclassTest01{

publicstaticvoidmain(String[]args){
List<String>strings=newArrayList<String>();
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获取泛型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泛型获取属性相关的资料

热点内容
安卓手机电话簿怎么导出到苹果手机 浏览:761
php实现投票 浏览:331
手机爆力解压加密视频文件 浏览:930
东方财富app怎么看北上资金图解 浏览:416
邢昭林程序员那么可爱拍现场 浏览:169
安卓什么应用可以免费看电视剧 浏览:504
合适pdf 浏览:293
app监测睡眠怎么选择 浏览:642
老人家用什么安卓手机好 浏览:955
解压包能不能送女朋友 浏览:701
好看发卡网源码 浏览:51
水平集算法matlab 浏览:769
局域网如何用ftp服务器配置 浏览:74
程序员惯性思考模式 浏览:441
如何在个税app上查身份证号 浏览:7
电视家app安装在电视上怎么安 浏览:889
怎么将pdf格式转化为图片格式 浏览:639
服务器拔掉raid卡怎么装系统 浏览:234
区域对称加密算法 浏览:247
数字转汉字php 浏览:735