java,关于利用反射自动设置List<T>中T的类型
用类名.class可以得到一个Class对象class.newInstance()可以得到一个实体现在我想要一个方法可以根据Class指定的类型,生成一个List<T>l...
用 类名.class 可以得到一个 Class对象
class.newInstance() 可以得到一个实体
现在我想要一个方法
可以根据 Class指定的类型,生成一个 List<T> list 集合
问题是怎么让程序自动指定 这个"T" ?
或者根本没有必要 指定 T ? 展开
class.newInstance() 可以得到一个实体
现在我想要一个方法
可以根据 Class指定的类型,生成一个 List<T> list 集合
问题是怎么让程序自动指定 这个"T" ?
或者根本没有必要 指定 T ? 展开
4个回答
展开全部
由于return 无法返回“数据类型”这种模糊的对象,所以无法通过“方法”达到你的目的。
但是你可以通过判断已知的数据类型或者采用超类来达到相同的目的。
判断已知数据类型可以使用关键字 instanceof :
if(str instanceof String){
List<String> list = null;
}
采用超类:
List<Object> list = null;
List<?> list = null; 使用“?”与使用Object达到的结果相同。
如果使用超类的话,在使用集合元素前最好先判断(instanceof)在进行强制类型转换,否则可能会出错。
但是你可以通过判断已知的数据类型或者采用超类来达到相同的目的。
判断已知数据类型可以使用关键字 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);
}
}
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
大哥,问题能描述清楚?仔细看看你问的问题是否已经矛盾了? 这里创建的都是对象,不是类型。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
要不你试下List<?> list;
看看是不是你要的效果
看看是不是你要的效果
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询