A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 冒烟的芒果 中级黑马   /  2013-7-26 18:51  /  1294 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 冒烟的芒果 于 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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
万琪 + 1 构造方法一样,,

查看全部评分

5 个回复

倒序浏览
  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:58
回复 使用道具 举报
编译不通过不是因为你没强转吗 应该要强转的吧
回复 使用道具 举报
本帖最后由 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. }
复制代码
回复 使用道具 举报 1 0
这里好像跟私有构造方法关系不大,Type mismatch: cannot convert from Object to Single,类型不匹配,无法自动向下转型,
  Single s = (Single)SingleMethod.newInstance(null);   强制转换就可以了,不过我估计你应该早解决了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马