黑马程序员技术交流社区

标题: 碰到 一个反射上的问题,半天没解决 [打印本页]

作者: 张飞年    时间: 2012-10-4 16:41
标题: 碰到 一个反射上的问题,半天没解决
本帖最后由 张飞年 于 2012-10-5 00:54 编辑
  1. public class PutString {
  2.         public static void main(String[] args) throws Exception{
  3.                 ArrayList<Integer> arraylist = new ArrayList<Integer>();
  4.                 arraylist.add(123);
  5.                 arraylist.add(234);
  6.                 Class clazz = PutString.class;
  7.                 Object obj = clazz.newInstance();
  8.                 Method methods = clazz.getMethod("add");//<font color="red">这里怎么取出add方法呢?老是在这出错 java.lang.NoSuchMethodException</font>
  9.                 methods.invoke(obj, "abcdefg");
  10.                 for(Integer a : arraylist){
  11.                         System.out.println(a);
  12.                 }
  13.         }
  14. }
  15. //这里想把abcdefg放进集合中
复制代码

作者: 黄小贝    时间: 2012-10-4 16:56
本帖最后由 黄小贝 于 2012-10-4 17:00 编辑

亲爱的~你犯了两个错误~~

第一个错误你应该懂~~粗心了~

第二个错误~~请看getMethod的函数声明~

public Method getMethod(String name, Class<?>... parameterTypes)
        throws NoSuchMethodException, SecurityException {
        // be very careful not to change the stack depth of this
        // checkMemberAccess call for security reasons
        // see java.lang.SecurityManager.checkMemberAccess
        checkMemberAccess(Member.PUBLIC, ClassLoader.getCallerClassLoader());
        Method method = getMethod0(name, parameterTypes);
        if (method == null) {
            throw new NoSuchMethodException(getName() + "." + name + argumentTypesToString(parameterTypes));
        }
        return method;
    }


更正后

import java.lang.reflect.Method;
import java.util.ArrayList;

public class PutString {
        public static void main(String[] args) throws Exception{
                ArrayList<Integer> arraylist = new ArrayList<Integer>();
                arraylist.add(123);
                arraylist.add(234);
                Class clazz = ArrayList.class;//错误1
                Object obj = clazz.newInstance();
                Method methods = clazz.getMethod("add",Object.class);//错误2
                methods.invoke(obj, "abcdefg");
                for(Integer a : arraylist){
                        System.out.println(a);
                }
        }
}
//这里想把abcdefg放进集合中                                                                             










作者: 覃宏海    时间: 2012-10-4 16:58
本帖最后由 覃宏海 于 2012-10-4 17:00 编辑

public class PutString {

        public static void main(String[] args) throws Exception{

                ArrayList<Integer> arraylist = new ArrayList<Integer>();

                arraylist.add(123);

                arraylist.add(234);

                Class clazz = PutString.class;

                Object obj = clazz.newInstance();

                Method methods = clazz.getMethod("add");//<font color="red">这里怎么取出add方法呢?老是在这出错 java.lang.NoSuchMethodException</font>
看来你对反射还是没看懂!你获得的是class PutString的字节码对吧!那么class PutString里有什么方法呢?它其实就只有一个main方法。而你需要的是集合中的add方法,但这个方法不是class PutString里面有的!而是ArrayList这个类里面才有!

                methods.invoke(obj, "abcdefg");

                for(Integer a : arraylist){

                        System.out.println(a);

                }

        }

}

//这里想把abcdefg放进集合中
作者: 张飞年    时间: 2012-10-5 00:53
覃宏海 发表于 2012-10-4 16:58
public class PutString {

        public static void main(String[] args) throws Exception{

呵呵 ,多谢批评。做的头混脑涨的,就。。。就短路勒
作者: 张飞年    时间: 2012-10-5 00:54
黄小贝 发表于 2012-10-4 16:56
亲爱的~你犯了两个错误~~

第一个错误你应该懂~~粗心了~

嗯 嗯,,懂了。下去还得把反射多看几遍啊




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2