黑马程序员技术交流社区

标题: 关于构造函数的反射问题 [打印本页]

作者: 冒烟的芒果    时间: 2013-7-26 18:51
标题: 关于构造函数的反射问题
本帖最后由 冒烟的芒果 于 2013-7-27 11:41 编辑

怎么样用反射的方法调用私有的构造函数创建对象??
  1. import java.lang.reflect.*;
  2. class Single
  3. {
  4.         //private static Single s = null;
  5.         private Single(){}
  6.         
  7. }

  8. class SingleDemo
  9. {
  10.         public static void main(String[] args) throws Exception
  11.         {
  12. Constructor SingleMethod = Class.forName("Single").getDeclaredConstructor();
  13.                 SingleMethod.setAccessible(true);
  14.                 Single s = SingleMethod.newInstance(null);//这里编译不通过
  15.                 System.out.println(s.getClass().getName());
  16.         }
  17. }
复制代码

作者: lljwdbklb    时间: 2013-7-26 19:09
  1. class Sample1{
  2.         String str = "";
  3.         public Sample1() {
  4.                 str="xxx";
  5.         }
  6.         public Sample1(String str) {
  7.                 this.str = str;
  8.         }
  9.         @Override
  10.         public String toString() {
  11.                 return "Sample1 [str=" + str + "]";
  12.         }
  13. }
  14. public class ClassReflection {
  15.         public static void main(String[] args) {        
  16.                 try {
  17.                         //new 样品类没参数的构造方法
  18.                         Object o2 = Sample1.class.newInstance();
  19.                         System.out.println("o2 : " + o2);
  20.                         //获取全部构造方法
  21.                         Constructor[] con = o2.getClass().getConstructors();
  22.                         //实现带参数构造方法               
  23.                         Object o3 = con[1].newInstance("dfajkdf");
  24.                         System.out.println("o3 : " + o3);
  25.                         //数组1的构造方法的方法名
  26.                         System.out.println(con[1].toGenericString());
  27.                 } catch (Exception e) {
  28.                         e.printStackTrace();
  29.                 }
  30.         }
  31. }
复制代码

作者: 草貌路飞    时间: 2013-7-26 19:27
编译不通过不是因为你没强转吗 应该要强转的吧
作者: lljwdbklb    时间: 2013-7-26 20:13
本帖最后由 lljwdbklb 于 2013-7-26 20:17 编辑
  1. import java.lang.reflect.Constructor;

  2. class Single
  3. {
  4.         //private static Single s = null;
  5.         private Single(){}
  6.         
  7. }

  8. class SingleDemo
  9. {
  10.         public static void main(String[] args) throws Exception
  11.         {
  12. Constructor SingleMethod = Class.forName("Single").getDeclaredConstructor();
  13.                 SingleMethod.setAccessible(true);
  14.                 Single s = (Single) SingleMethod.newInstance(null);//这里编译通过了~~
  15.                 System.out.println(s.getClass().getName());
  16.         }
  17. }
复制代码

作者: 单凯    时间: 2013-8-1 11:57
这里好像跟私有构造方法关系不大,Type mismatch: cannot convert from Object to Single,类型不匹配,无法自动向下转型,
  Single s = (Single)SingleMethod.newInstance(null);   强制转换就可以了,不过我估计你应该早解决了




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