「java获得泛型类型」java泛型类型通配符
本篇文章给大家谈谈java获得泛型类型,以及java泛型类型通配符对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
java获取泛型
这段代码放在BaseDaoImpl中,在for循环中打印的t就是T和PK。
最后得到的persistType就是T的实际类型。
解释一下红色的部分:
因为this代表你的实例,
如果这个实例是(用Integer做ID的Student数据对象为例)
BaseDaoImplStudent, Integer studentDao=new BaseDaoImplStudent, Integer();
这个实例的“范型父类”(getGenericSuperclass)就是BaseDaoStudent, Integer,
如果你的实例是BaseDaoImplT, PK子类的实例,
那么“范型父类”就是BaseDaoImplT, PK,
反正不是HibernateDaoSupport,因为HibernateDaoSupport不带范型。
最后,不管是BaseDaoImpl,还是BaseDao,getActualTypeArguments()都得到Class数组,内容是{T的类型,PK的类型},取第一个(下标0),就得到T的类型(例中为Student.class)。
如何取得java泛型里的类型
子父类的方式获取泛型,刚刚写的代码,参考一下。
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
/**
*
* 开发公司:SOJSON在线工具 p
* 版权所有:©
* 博客地址:
* p
*
* 注释写这里
*
* p
*
* 区分 责任人 日期说明br/
* 创建 周柏成 2017年4月13日 09:49 br/
*
* @author zhou-baicheng
* @email so@sojson.com
* @version 1.0,2017年4月13日 09:49 br/
*
*/
public class Demo2T,M {
/**
* 这里是子类,写在一个文件里,方便调用,static修饰是为了和当前类同级
* @author Administrator
*
*/
static class SunDemo extends Demo2SunDemo,Demo2{
}
public Demo2() {
Type type = getClass().getGenericSuperclass();
if (type instanceof ParameterizedType) {
Type[] entityClass = ((ParameterizedType) type).getActualTypeArguments();
System.out.println("获取的泛型类型:");
for (Type t : entityClass) {
Class clazz = (Class)t;
System.out.println(clazz.getCanonicalName());
}
}
}
/**
* 通过实例化子类,父类获取。
* @param args
*/
public static void main(String[] args) {
new SunDemo();
}
}
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获得泛型类型和java泛型类型通配符的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-12-21,除非注明,否则均为
原创文章,转载请注明出处。