永发信息网

如何获得java 泛型类中T的实例?

答案:6  悬赏:10  手机版
解决时间 2021-03-10 14:12
如何获得java 泛型类中T的实例?
最佳答案
c#中可以,但是java中貌似不行
java中需要实例化某个类的实例,需要知道类名称
Class.forName("xxx.xx.MyClass").newInstance()
全部回答
T.getClass()或 T.class,或class.forName(T.getClass().getName())
public Base(){
Class classType = Base.class;
}
public class Base{
Class classType=T.class;
public Base(){
//想在这里 得到T的类对象 赋值给 classType
}
Java与C++不同,如果你在放进一个类以后想用new T()来创建一个实例,Java是无法实现的。这是因为Java有擦除机制,而且编译器不能验证T具有默认(无参)构造器。
解决方案是传递一个工厂对象,并且使用它来创建新的实例。最便利的工厂对象就是Class对象,因此如果使用类型标签,那么你就可以使用newInstance来创建这个类型的新对象。
具体查看Bruce.Eckel著《Java编程思想(第四版)》的383页。
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 Base {
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 Base {
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];
}
}
其中Base是泛型类,在父类中声明getGenericType,子类继承具体的Base,那么在子类中就可以通过getGenericType(0)获取到String的class.
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
乡土小说代表作家不包括()。
远福包装地址在哪,我要去那里办事
2012年龙银条现值多少钱
头顶撞到鼓起来,摸起来很硬还会不会消了。
哈尔滨好多鱼多少钱一盒
有关酶的一到实验题
信阳有好的艺术高中么?
北舞舞蹈专业前10名,文化370分能录取吗?
下列动物细胞培养条件的叙述,不正确的是A.
洞庭湖活鱼馆地址在什么地方,想过去办事
显卡外接供电什么意思
什么是中国版的以太坊?
某成年人的膳食情况是摄入的总量小于身体消耗
腾达AC9路由器激活和未激活有什么区别吗,低
延安市国家司法考试办公室怎么去啊,有知道地
推荐资讯
请问一下天津力神电池股份有限公司怎么样啊?
你们都是如何定义“潮流”二字的,用一件衣服
苦中寻乐对什么
I don't ever wanna let you go…怎么翻
刚刚在一个好友签名里看到9601750数字不知道
阅读下面一篇文章,完成练习。 别打扰
执行法官不作为怎么办
怎样评价张无忌这个角色?
作为地球村的一员,你准备怎么做?
已知a满足|2014-a|+√a-2015=a,求a-2014²
【strawberries】strawberries是什么意思是属
50装载机每小时油耗
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?