`
usummer
  • 浏览: 9794 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

setAccessible()方法

阅读更多

java代码中,常常将一个类的成员变量置为private

 

在类的外面获取此类的私有成员变量的value时,需要注意:

 

测试类:

public class AccessibleTest {

	private int id;
	private String name;

	public AccessibleTest() {

	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

}

 

Main类:

public class Main {

	public static void main(String[] args) throws Exception {
		Class clazz = Class.forName("com.test.accessible.AccessibleTest");
		AccessibleTest at = new AccessibleTest();
		at.setId(1);
		at.setName("AT");
		for (Field f : clazz.getDeclaredFields()) {
			f.setAccessible(true);//AccessibleTest类中的成员变量为private,故必须进行此操作
			System.out.println(f.get(at));//获取当前对象中当前Field的value
		}

	}

}

如果没有在获取Field之前调用setAccessible(true)方法,异常:

 java.lang.IllegalAccessException:
Class com.test.accessible.Main 
can not access 
a member of class com.test.accessible.AccessibleTest
with modifiers "private"
 

当然在AccessibleTest类的内部(AccessibleTest的内部类除外)

进行如上操作则不需要调用setAccesible()方法

 

 

0
3
分享到:
评论

相关推荐

    setAccessible()方法是否破坏了Java的访问规则

    一般情况下,我们并不能对类的私有字段进行操作,利用反射也不例外,但有的时候,例如要序列化的时候,我们又必须有能力去处理这些字段,这时候,我们就需要调用AccessibleObject上的setAccessible()方法来允许这种...

    web课作业清单1

    Team23选1·普通:编程实现利用反射获取类信息· 中等:利用setAccessible方法禁止访问类中私有属性和方法(获取不到私有属性和方法)· 地狱:利用

    java实现非法访问异常示例

    创建ExceptionTest类,在该类的main()方法中,使用反射获得String类的所有域,不要使用setAccessible方法修改这些域的可见性,然后通过反射获得私有域中与”hash”相匹配的int值,并使用try-catch语句块捕获非法访问...

    java反射机制学习笔记

    day021-反射和注解笔记和代码.rar

    Method[] methods = clazz.getDeclaredMethods() 获取任意访问权限所有造方法数组,并且都是自己的方法 Method method = clazz.getMethod(String methodName,Class... 参数字节码)根据方法名和参数类型...

    你不知道的JAVA高级应用

    2.反射,暴力反射,和静态做斗争,暴力反射,setAccessible 无论公有私有都可以用来访问 3.动态代理 在调用这个目标方法前,后,2头,异常处都可以动态的加上自己需要逻辑判断,而且根据反射来动态的替换实现类,大大提升了...

    eclipse安卓开发必备工具

    行前调用上述方法: cts[i].setAccessible(true); 这样就可以创建只有构造函数的实例、调用私有构造方法,访问类的私有属性。 呵呵,这样好像java安全性就大大降低.如果你非常注重应用的安全性,java当然考虑到这...

    Java 高级特性.doc

    @SuppressWarnings("deprecation") //在mian方法内调用一个没有定义的方法时,运行的时候将会出现这一注解! public static void main(String [] args) { Test.sayHello(); } } @SuppressWarnings 批注允许您...

    permit-reflect:允许对Java 11进行反射访问

    Permit.setAccessible启用对Field或Method访问,而无需考虑模块 Permit.godMode将所有模块中的所有软件包打开到所有模块 Permit.main在上帝模式下运行指定类的main方法。 这应该允许许多Java 8程序与Java的更高版本...

    xmljava系统源码-MyTabLayout:修改系统的TabLayout来改变Indicator(下划线)的样式

    使用网上普遍的方法,反射TabLayout 1、写个工具类 封装: public class TabLayoutUtils { public static void setIndicator(TabLayout tabs, int leftDip, int rightDip, int bottomDip) { Class<?> ...

    Action Bar初识案例

    = null) { menuKeyField.setAccessible(true); menuKeyField.setBoolean(mconfig, false); } } catch (Exception ex) { }2、Action Bar自定义样式之前Action Bar是不兼容3.0以下的,有开源的actionbarsherlock可以...

Global site tag (gtag.js) - Google Analytics