黑马程序员技术交流社区
标题:
关于泛型的问题
[打印本页]
作者:
lh994749769
时间:
2015-3-2 20:51
标题:
关于泛型的问题
package generic;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.ListIterator;
/**
@author LiHang
@date: 2015年3月2日下午6:25:44
*/
public class Generic {
public Generic() {
// TODO Auto-generated constructor stub
}
public static void main(String[] args){
/*ArrayList arr = new ArrayList();
arr.add(4);
arr.add("fadfe");
System.out.println(arr);*/
/*
*
* 需求:在Integer类型下的ArrayList集合中添加String类型的数据
* 因为ArrayList已经被指定为Integer类型,所以就要得到,它未被指定类型的add方法,也就是add(Object),
* 那么就要用到反射,
*
* */
ArrayList<Integer> arrInteger = new ArrayList<Integer>();
Method add = null;
try {
add = arrInteger.getClass().getMethod("add", Object.class);
} catch (NoSuchMethodException | SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
add.invoke(arrInteger, "stringToArrInteger");
} catch (IllegalAccessException | IllegalArgumentException
| InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(arrInteger);
arrInteger.add(2);
arrInteger.add(3);
arrInteger.add(4);
arrInteger.add(5);
arrInteger.add(6);
//输出方式一
for(int i = 0;i<arrInteger.size();i++){
sop(arrInteger.get(i));
}
//输出方式二
for(ListIterator it = arrInteger.listIterator();it.hasNext();){
sop(it.next());
}
sop(arrInteger);
}
/*public static <T> void sop(T t){
System.out.println(t.getClass().getName()+"::"+t);
}*/
//打印语句
public static void sop(Object t){
System.out.println(t.getClass().getName()+"::"+t);
}
}
复制代码
上面代码是将一个Sting类型的数据加入到ArrayList<integer>集合中,这么写是没有问题的,但是当把sop打印语句改为、
public static <T> void sop(T t){
System.out.println(t.getClass().getName()+"::"+t);
}
复制代码
的时候最会报String类型转换为Integer异常,实在想不通是为什,求解答
作者:
lh994749769
时间:
2015-3-2 20:52
是第52行出现的问题
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2