java 反射list泛型类型_java,关于利用反射自动设置List

java,关于利用反射自动设置List中T的类型泛型应用。

用 类名.class 可以得到一个 Class对象

class.newInstance() 可以得到一个实体

现在我想要一个方法

可以根据 Class指定的类型,生成一个 List list 集合

问题是怎么让程序自动指定 这个”T” ?

或者根本没有必要 指定 T ?

分享到:

2012-03-27 20:04 天天爱答题,20元话费等你拿~提问者采纳

由于return 无法返回“数据类型”这种模糊的对象,所以无法通过“方法”达到你的目的。

但是你可以通过判断已知的数据类型或者采用超类来达到相同的目的。

判断已知数据类型可以使用关键字 instanceof :

if(str instanceof String){

List list = null;

}

采用超类:

List list = null;

List> list = null; 使用“?”与使用Object达到的结果相同。

如果使用超类的话,在使用集合元素前最好先判断(instanceof)在进行强制类型转换,否则可能会出错。

追问

str instanceof String

这种形式倒是很容易,但是我想让方法更”自由一点”,不要太死

请问用超类的方法怎么用?可以给个例子吗?

回答

用代码给你例子:

import java.util.*;

public class A{

List list = null;

static int b;

int a = 0;

private A(){ //这虽然是使用了private声明的构造函数

//但是在使用newInstance()方法时调用的是这个构造函数

//如果类中声明了其他构造函数且没有默认构造函数的话,会出错。

//你可以试一下注释掉这个构造函数。

a+=b++;

}

public A(Object o){ //与前一个构造函数作对比。

a-=b++;

}

List getList(Object o){

List list = new ArrayList();

try {

for(int i = 0 ; i < 10 ; i++ ){

Object b = o.getClass().newInstance();

list.add(b);

}

} catch (InstantiationException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IllegalAccessException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return list;

}

public static void main(String[] args){

A a = new A();

a.list = a.getList(a);

for(Object o:a.list){

System.out.println(((A)o).a);

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值