(temp)list.get(i); 这样是JDK不允许的,实际上也没有任何意义,因为Object x = list.get(i); Object x = (temp)list.get(i)并没有实际区别 如果你想判断list.get(i)如果不是temp类型时抛出 ClassCastException,可以这样Object x = list.get(i); Class clz = Class.forName(temp);if(x.getClass() != clz) throw new ClassCastException(...);
问题是你从list取出对象后,你觉得你后续代码到底要写什么? temp o = (temp)list.get(i);//你的原意就是指可以动态生成这个类型temp但是问题是,你后续代码到底调用o的什么方法或者属性?你的主程序在写的过程中就已经无法预知temp到底是什么类,也就不可能知道里面有什么方法, 那后续代码就根本无法写了如果你想动态调用里面的方法,也就是在主程序中并不写死调用什么方法,那完全可以利用java中的反射机制来完成。 Object o = list.get(i); o.getClass().getMethod(methodName, ...).invoke(o);这样就可以动态调用了,你并不需要将list.get(i)转换成temp类型的对象
c.newInstance();
String temp = "ArrayList";
如果我要把 list.get(i)转换成ArrayList类型,我还是只知道ArrayList是个字符串
这样的话不是生成temp类的实例,而是生成Class类型的实例!
List<ArrayList<String>> list = new ArrayList<ArrayList<String>>();
list.add(new ArrayList<String>());
List l = list.get(1);
你要这样的话,你的temp字符串必须是这样的:temp="java.util.ArrayList";先把包名不全
然后:Class.forName(temp).cast(list(0));这里要捕获ClassNotFoundException。
private String age;
private String school;
private int sex;
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSchool() {
return school;
}
public void setSchool(String school) {
this.school = school;
}
public int getSex() {
return sex;
}
public void setSex(int sex) {
this.sex = sex;
}
如:String temp = "Temp"; PS:Temp 是上面定义的自定义类型
而List list = new ArrayList();
list.add(new Temp());
list.add(new Temp());
list.add(new Temp());for(int i = 0; i<list.size(); i++){ list.get(i);}问题就是我想转换list返回的Object对象为字符串描述的对象,麻烦了,谢谢
我在8楼给了方法了。
现在你的temp="Temp";应该是找不到类的,应该写成temp="com.Temp";然后用8楼的方法。
ps:lz你为什么要费这么大的劲来搞这个?你是想往list里面添加任意类的对象,然后根据类名去取吗?
所以我取的时候肯定时候是要动态的来转换
顺便说下,我只是打个比方字符串是 ArrayList 其实我肯定可以通过 object.getClass().getName 来得到
包名和类型名称的PS: 8楼的
Class.forName(temp).cast(list(0));这里要捕获ClassNotFoundException。
cast方法是不是jdk1.4没有,我怎么.都.不出来谢谢帮我解决下,谢谢了,本人总是喜欢有奇思怪想
如果你想判断list.get(i)如果不是temp类型时抛出 ClassCastException,可以这样Object x = list.get(i);
Class clz = Class.forName(temp);if(x.getClass() != clz)
throw new ClassCastException(...);
temp o = (temp)list.get(i);//你的原意就是指可以动态生成这个类型temp但是问题是,你后续代码到底调用o的什么方法或者属性?你的主程序在写的过程中就已经无法预知temp到底是什么类,也就不可能知道里面有什么方法,
那后续代码就根本无法写了如果你想动态调用里面的方法,也就是在主程序中并不写死调用什么方法,那完全可以利用java中的反射机制来完成。
Object o = list.get(i);
o.getClass().getMethod(methodName, ...).invoke(o);这样就可以动态调用了,你并不需要将list.get(i)转换成temp类型的对象
list.add(new Temp());
list.add(new Temp());
list.add(new Temp());
谢谢楼上的,好像有点这个意思了,比如说,我list的每个temp对象的get方法返回值都不一样,我可以通过
Object o = list.get(i);
o.getClass().getMethod(methodName, ...).invoke(o);取出来吗?
我就是想把一个List
自动转换成XML的形式
而我不知道 list里面是什么类型的对象
public String listToXml(List list){ .......return strXml}