`
usummer
  • 浏览: 9973 次
  • 性别: 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的访问规则

    ### setAccessible()方法是否破坏了Java的访问规则 在Java编程语言中,为了保护类的内部状态不被外部代码随意更改,通常会采用封装技术,将类中的成员变量声明为私有(private),并通过公有(public)的方法来提供访问...

    JAVA反射知识总结

    5. setAccessible方法的作用: 通过调用方法、构造函数或字段的`setAccessible(true)`方法,可以绕过Java的访问控制检查,允许访问和操作私有成员。这对于执行如单元测试等需要访问私有组件的操作非常有用。 6. ...

    web课作业清单1

    【利用setAccessible方法禁止访问私有属性和方法】 在默认情况下,反射无法访问类的私有成员。但是,通过调用`setAccessible(true)`方法,可以禁用Java的访问控制检查,从而能够访问私有属性和方法。然而,这可能...

    Java对类私有变量的暴力反射技术讲解

    其中,getDeclaredField方法可以获取私有变量的Field对象,setAccessible方法可以使私有变量可被访问,set方法可以设置私有变量的值。 以下是一个简单的示例代码: ```java package com.howlaa.day04; import ...

    Java如何基于反射机制获取不同的类

    setAccessible方法可以避开权限检测,用以访问权限不足的成员。 在实际应用中,Java中的反射机制可以应用于很多场景,例如在spring框架中,使用反射机制来实例化Bean对象,在hibernate框架中,使用反射机制来映射...

    PHP获取类私有属性的3种方法

    接下来,通过调用setAccessible方法并传入true,设置该属性为可访问状态。最后,使用getValue方法读取属性值。这里需要注意的是,直接使用对象属性访问的方式(如$foo->bar)是不可行的,必须通过ReflectionProperty...

    Android Studio用genymotion运行后小图标无法显示问题

    并且,在调用该方法时,我们需要使用setAccessible方法来设置该方法的可访问性。 通过使用反射机制,我们可以成功地显示小图标。在onMenuOpened方法中,我们可以使用反射机制来调用setOptionalIconsVisible方法,以...

    java 反射 调用私有方法(有参数私有方法)获取私有属性值

    3. **设置访问权限**:由于私有方法默认是不可访问的,所以我们需要通过`setAccessible(true)`方法来改变其访问权限,允许反射调用。`privateMethod.setAccessible(true);` 4. **调用私有方法**:现在我们可以调用...

    Java反射方法调用

    在调用私有方法时,需要先设置`Method`对象的`setAccessible(true)`,以允许访问私有成员: ```java Method privateMethod = clazz.getDeclaredMethod("yourPrivateMethodName"); privateMethod.setAccessible(true...

    Java方法反射调用demo

    privateMethod.setAccessible(true); privateMethod.invoke(myInstance); ``` 在`Invoke.java`和`Print.java`这两个文件中,很可能是实现了一个或多个上述示例的代码。`Invoke.java`可能包含反射调用的逻辑,而`...

    对私有方法进行单元测试

    privateMethod.setAccessible(true); Object result = privateMethod.invoke(testCaseHelperInstance, args); assertThat(result).isEqualTo(expectedResult); ``` 其次,可以考虑修改设计,使得私有方法可以通过...

    java反射机制,调用私有方法

    注意,调用私有方法时,通常需要使用`setAccessible(true)`来绕过Java的访问控制,但这可能带来安全风险,因此需谨慎使用。 总的来说,Java反射机制提供了强大的编程能力,但同时也需要开发者对程序的运行行为有...

    用反射的方式获取父类中的所有属性和方法

    如果需要访问私有属性或方法,我们需要调用`setAccessible(true)`来取消访问限制: ```java field.setAccessible(true); method.setAccessible(true); ``` 5. 动态调用方法和设置/获取属性值: 一旦我们有了...

    junit测试private函数

    3. **设置访问权限**:由于私有方法默认不允许外部直接访问,因此在测试前,我们需要通过`setAccessible(true)`方法取消访问限制,允许反射调用。 4. **调用私有方法**:使用`Method`对象的`invoke()`方法,传入...

    java反射获取所有属性,获取所有get方法,包括子类父类

    - 对于非公有的属性和方法,需调用`setAccessible(true)`来允许访问。 - 反射操作可能会抛出异常,如`ClassNotFoundException`, `NoSuchFieldException`, `IllegalAccessException`等,需要适当地捕获和处理。 ...

    java反射,获取所有属性、方法以及List集合类

    对于私有字段和方法,可以使用`setAccessible(true)`来绕过访问限制。这需要谨慎使用,因为可能破坏封装性。 ```java field.setAccessible(true); field.set(obj, newValue); ``` 总结来说,Java反射提供了一...

    Java反射机制,通过对象访问调用类的私有成员或方法

    要调用私有方法,我们需要使用`Method`类,先获取到该方法的`Method`对象,然后通过`setAccessible(true)`将其访问权限设为可访问,最后通过`invoke()`方法调用: ```java Method privateMethod = personClass....

    Fortify解决方案手册.docx

    Java中存在一个潜在的安全风险,即通过`AccessibleObject.setAccessible(true)`方法,可以绕过访问控制限制,访问和操作私有成员。 **解决方案** 推荐使用Spring框架中的`ReflectionUtils`工具类来安全地调用私有...

Global site tag (gtag.js) - Google Analytics