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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 阿苏勒 中级黑马   /  2014-8-11 18:20  /  1238 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

有了某个类的字节码,调用newInstance方法,通过无参数的构造函数创建对象。那么如果无参数的构造函数是私有的,那怎么通过它创建对象呢?
getDeclaredConstructor()必须要指定参数的,
童鞋们,谢谢帮助了!

6 个回复

倒序浏览
可以用暴力反射,毕向东老师和张孝祥老师的视频里都提到过。
  1. import java.lang.reflect.*;

  2. class Person{
  3.         private  Person(){
  4.                 System.out.println("私有空参构造方法。");
  5.         }
  6. }

  7. public class Demo{
  8.         public static void main(String[] args) throws Exception{
  9.                 Class clazz=Class.forName("Person");
  10.                 Constructor cons=Person.class.getDeclaredConstructor();   //得到构造方法
  11.                 cons.setAccessible(true);    //取消了权限检查
  12.                 Person p=(Person)cons.newInstance();   //少年,构造吧!
  13.         }
  14. }
复制代码



回复 使用道具 举报
wisely 发表于 2014-8-11 18:35
可以用暴力反射,毕向东老师和张孝祥老师的视频里都提到过。

getDeclaredConstructor不是一定要传入参数,如果有的话才传入,就像有的方法一样,如果有的话才传入。
回复 使用道具 举报
这个貌似得用到暴力反射,使用Constructor的setAccessible(true);方法。
回复 使用道具 举报
恩。楼上正解。暴力反射来解决,不过一般不建议用暴力反射,因为人家既然用private关键字修饰,说明他不想把这个方法暴露出去,你用暴力反射的话就叫逼良为那个啥了
回复 使用道具 举报
setAccessible(true);方法。强制反射
回复 使用道具 举报
wisely 发表于 2014-8-11 18:36
getDeclaredConstructor不是一定要传入参数,如果有的话才传入,就像有的方法一样,如果有的话才传入。 ...

getDeclaredConstructor(Class<?>... parameterTypes)  接受的参数是可变参数列表,而可变参数列表是可以接受0个参数的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马