- 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异常,实在想不通是为什,求解答
|
|