`
usummer
  • 浏览: 10061 次
  • 性别: 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. ...

    NoSuchMethodException(解决方案).md

    在使用反射时,可以通过AccessibleObject类的setAccessible方法来设置方法为可访问。需要注意的是,虽然这可以绕过Java的访问控制,但在实际操作中应当谨慎使用,以免破坏封装性或引起安全问题。 4. **代码示例和...

    javax.management.ReflectionException(解决方案).md

    在这种情况下,可以使用Java的setAccessible方法来绕过访问控制检查。但是,这种方法可能会破坏封装性并带来安全风险,因此需要谨慎使用。建议在没有其他替代方法的情况下再考虑使用反射来访问私有字段。 3. 依赖...

    web课作业清单1

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

    反射机制详解

    此外,setAccessible方法可以启用或禁用访问安全检查,这在某些情况下可以提高反射的运行速度。 最后,当使用反射时,可能会需要一些性能提升,比如通过cglib或javaassist这类字节码操作库来直接操作字节码,从而...

    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反射性能优化:深入探讨setAccessible与MethodHandle的技术差异及应用场景

    Java 反射(Reflection)是一种强大的机制,允许程序在运行时检查和操作类的成员变量和方法。然而,传统的 `setAccessible(true)` 方式虽然便捷,但存在安全性问题,并且性能相对较低。在 Java 7 引入 `MethodHandle...

    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`可能包含反射调用的逻辑,而`...

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

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

    对私有方法进行单元测试

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

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

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

    Fortify解决方案手册.docx

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

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

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

Global site tag (gtag.js) - Google Analytics