黑马程序员技术交流社区

标题: [已解决]关于反射的问题,求教 [打印本页]

作者: 胡宝林    时间: 2012-6-3 10:33
标题: [已解决]关于反射的问题,求教
本帖最后由 hy19985125 于 2012-6-4 10:56 编辑

package cn.itcast.one;
public class Two {
   private final String [] s;
   public Two(String [] s)
   {
   this.s=new String[s.length];
   for(int x=0;x<S.LENGTH;X++){
    this.s[x]=s[x];
   }
   }
  }
我用下面的方法反射Two这个类 ,先反射出他的构造函数,然后用这个构造函数创建对象
Class c=Class.forName("cn.it.cast.one.Two");
  Constructor cc=c.getConstructor(String [].class);
String [] s=new String []{"abc"};
  Object o=cc.newInstance(s);

结果报错了, 哪里错了,求解!!!
作者: 杜俊彪    时间: 2012-6-3 11:21
错误出在这里, Object o=cc.newInstance(s); 张老师重点说过了;  因为你的s是一个String数组;   要把它给包装一下,   变为一个Object对象;   因为cc.newInstance(Object obj)里放的是一个Object ;      我给你改了一下,
  1. import java.lang.reflect.Constructor;

  2. public class Two {
  3.    private String [] s;
  4.    public Two(String [] s)
  5.    {
  6.    this.s=new String[s.length];
  7.    for(int x=0;x<s.length;x++){
  8.     this.s[x]=s[x];
  9.    }
  10.    
  11.    }
  12.    public static void main(String [] arg)throws Exception{
  13.            Class c=Class.forName("china.adu.demo.Two");
  14.            Constructor cc=c.getConstructor(String[].class);
  15.            String [] s=new String []{"abc"};
  16.            Object o=cc.newInstance((Object)s); // 问题出在这里;
  17.            System.out.println(o);
  18.            }
  19.   }
复制代码

作者: Kristy_Li    时间: 2012-6-3 11:30
for语句里面有个大写的S么,还有个大写的LENGTH,不应该是小写代表字符串数组长度么




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