java,关于利用反射自动设置List<T>中T的类型

用类名.class可以得到一个Class对象class.newInstance()可以得到一个实体现在我想要一个方法可以根据Class指定的类型,生成一个List<T>l... 用 类名.class 可以得到一个 Class对象
class.newInstance() 可以得到一个实体
现在我想要一个方法
可以根据 Class指定的类型,生成一个 List<T> list 集合
问题是怎么让程序自动指定 这个"T" ?
或者根本没有必要 指定 T ?
展开
 我来答
198901245631
推荐于2017-09-04 · TA获得超过3.5万个赞
知道大有可为答主
回答量:9037
采纳率:92%
帮助的人:1667万
展开全部
泛型可以用"<T>"代表,任意类型的。
解释: “<T>”是泛型的默认值,可以被任意类型所代替,如:
List<String> list = new ArayList<String>();这个就定义了一个String类型的”泛型“集合,那么T的类型就是字符串
List<T> list = new ArayList<T>();
可以赋值给list:list.add("StringBatch");
可以获取到list的值:list.get(0),结果就是”StringBatch“;
这个时候T的类型也是String。也就是说T是动态的,可以被任意指定类型。
天方之夜谭
推荐于2017-10-07 · TA获得超过587个赞
知道小有建树答主
回答量:223
采纳率:100%
帮助的人:203万
展开全部
由于return 无法返回“数据类型”这种模糊的对象,所以无法通过“方法”达到你的目的。
但是你可以通过判断已知的数据类型或者采用超类来达到相同的目的。
判断已知数据类型可以使用关键字 instanceof :
if(str instanceof String){
List<String> list = null;
}
采用超类:
List<Object> 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);
}
}
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xiaolincc26
2012-03-27 · TA获得超过170个赞
知道小有建树答主
回答量:146
采纳率:0%
帮助的人:75.3万
展开全部
大哥,问题能描述清楚?仔细看看你问的问题是否已经矛盾了? 这里创建的都是对象,不是类型。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友58f1315
2012-03-27 · TA获得超过857个赞
知道小有建树答主
回答量:290
采纳率:83%
帮助的人:195万
展开全部
要不你试下List<?> list;
看看是不是你要的效果
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式