黑马程序员技术交流社区

标题: 有个反射的问题 [打印本页]

作者: 阿苏勒    时间: 2014-8-11 18:20
标题: 有个反射的问题
有了某个类的字节码,调用newInstance方法,通过无参数的构造函数创建对象。那么如果无参数的构造函数是私有的,那怎么通过它创建对象呢?
getDeclaredConstructor()必须要指定参数的,
童鞋们,谢谢帮助了!
作者: wisely    时间: 2014-8-11 18:35
可以用暴力反射,毕向东老师和张孝祥老师的视频里都提到过。
  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:36
wisely 发表于 2014-8-11 18:35
可以用暴力反射,毕向东老师和张孝祥老师的视频里都提到过。

getDeclaredConstructor不是一定要传入参数,如果有的话才传入,就像有的方法一样,如果有的话才传入。
作者: 반야_바라_밀    时间: 2014-8-11 18:38
这个貌似得用到暴力反射,使用Constructor的setAccessible(true);方法。
作者: 怀念黑海岸    时间: 2014-8-11 18:44
恩。楼上正解。暴力反射来解决,不过一般不建议用暴力反射,因为人家既然用private关键字修饰,说明他不想把这个方法暴露出去,你用暴力反射的话就叫逼良为那个啥了
作者: pengyu1801    时间: 2014-8-11 18:50
setAccessible(true);方法。强制反射
作者: 乐此不疲    时间: 2014-8-11 18:59
wisely 发表于 2014-8-11 18:36
getDeclaredConstructor不是一定要传入参数,如果有的话才传入,就像有的方法一样,如果有的话才传入。 ...

getDeclaredConstructor(Class<?>... parameterTypes)  接受的参数是可变参数列表,而可变参数列表是可以接受0个参数的





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