java se 064 使用反射机制调用对象的私有方法、访问对象的私有成员变量.docx
还剩
2页未读,
继续阅读
下载文档到电脑,马上远离加班熬夜!
亲,喜欢就下载吧,价低环保!
内容要点:
Java SE 064 使用反射机制调用对象的私有方法、访问对象的私有成员变量一、 Method 对象的 setAccessible(Boolean flag)为对象设置可访问的标志,如果标志为 true,表示被反射的对象应该压制 java 语言的访问检查。如果标志为 false,则 java 会强制访问权限检查。package com.javase.refelect;/*** 有些时候想去使用某个类提供的私有方法,比如想对其进行测试,那么没法去改变 目标的方法,因此就只能通过反射的方式去调用它,因此反射为我们提供了这样一种机制,可以在类的外面调用private的一个私有方法,或者是修改private 的成员变量* @author x_xiongjie**/public class Private {private String sayHello(String name){return "hello " + name;}}package com.javase.refelect;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;public class TestPrivate {public static void main(String[] args) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {Private p = new Private();Class classType = p.getClass();Method method = classType.getDeclaredMethod("sayHello", new Class[]{String.class});method.setAccessible(true);//压制 java的访问控制检查String str = (String) method.invoke(p, new Object[]{"xiongjie"});System.out.println(str);}}二、访问控制检查method.setAccessible(true);//压制 java 的访问控制检查在 SSH 框架中,很多时候框架需要用到。Hibernate 要求提供一个不代参数的构造方法,对类的属性提供 set 方法,get 方法。只有提供了这样一种约定,Hibernate 才能知道这个属性要想给它设置值的时候,应该调用什么方法,有的时候,没有提供这个方法,也能赋值,给 private 的成员变量赋值,就是通过反射的方式来做到的。调用 set 方法也是通过反射来去调用的。二、 private 属性package com.javase.refelect;public class Private2 {private String name = "zhangsan";public String getName() {return name;}}package com.javase.refelect;import java.lang.reflect.Field;public class TestPrivate2 {public static void main(String[] args) throws SecurityException, NoSuchFieldException, IllegalArgument
发表评论
暂无评论,赶快抢占沙发吧。