`
三里小龙
  • 浏览: 88154 次
  • 性别: Icon_minigender_1
  • 来自: 孝感
社区版块
存档分类
最新评论

利用反射改变私有属性的值

    博客分类:
  • Java
阅读更多

 

package org.fanzone.lang.reflect;

 

import java.io.Serializable;

import java.lang.reflect.Field;

 

/**

* Title: JavaTech<br>

* Description: Change the value of the private member of a specified class.<br>

* Copyright: Copyright (c) 2011 <br>

* Create DateTime: Jul 12, 2011 2:23:05 PM <br>

* @author wangmeng

*/

public class ChangePrivatePropertyValue {

 

/**

* A inner class as a bean.

*/

class Person implements Serializable{

private static final long serialVersionUID = 8875435845244822261L;

private String corporeity;

private String spirit;

public String getCorporeity() {

return corporeity;

}

public void setCorporeity(String corporeity) {

this.corporeity = corporeity;

}

public String getSpirit() {

return spirit;

}

public void setSpirit(String spirit) {

this.spirit = spirit;

}

}

/**

* Change the value of the specified property.

* @param obj

* @param property

* @param value

*/

public static void changeValue(Object obj, String property, Object value){

Field field = null;

try {

//Get the specified declared field.

field = obj.getClass().getDeclaredField(property);

//Open the accessible socket. 

field.setAccessible(true);

//Inject the new value.

field.set(obj, value);

} catch (SecurityException e) {

e.printStackTrace();

} catch (NoSuchFieldException e) {

e.printStackTrace();

} catch (IllegalArgumentException e) {

e.printStackTrace();

} catch (IllegalAccessException e) {

e.printStackTrace();

}

}

 

public static void main(String[] args){

Person meng = new ChangePrivatePropertyValue().new Person();

meng.setCorporeity("man");

meng.setSpirit("woman");

System.out.println("Meng is a person who owns " + meng.getCorporeity() + " corporeity and " + meng.getSpirit() + " spirit.");

changeValue(meng, "spirit", "man");

System.out.println("But now, he get the " + meng.getSpirit() + " spirit at last...(^_^)");

 

}

}


0
1
分享到:
评论

相关推荐

    C#net反射实现访问类中的私有变量或者方法

    在本篇文章中,我们将深入探讨如何利用C#中的反射机制来访问类中的私有变量或方法。通过一个具体的示例代码,我们将详细了解反射的基本概念、使用场景以及如何具体操作。 ### 一、C#反射机制简介 #### 1.1 什么是...

    Java反射机制修改私有成员变量的实现_Reflection

    标题“Java反射机制修改私有成员变量的实现_Reflection”着重讲述了如何利用反射来修改私有成员变量的值。在Java中,私有成员变量通常被视为封装的一部分,不被外部类直接访问。然而,通过反射,我们可以绕过这种...

    利用反射给属性赋值

    本篇文章将详细探讨如何利用反射来给对象的属性赋值,以及这个过程中的关键知识点。 一、反射的概念 反射是指在程序运行期间获取并操作类、接口、字段和方法等元数据的能力。通过反射,我们可以在运行时动态地创建...

    C#私有成员反射调用类库

    尽管可以利用反射访问私有成员,但这应被视为一种特殊情况下的权宜之计,而不是常规编程实践。在单元测试中,适度使用反射可以帮助验证私有方法的行为,但也要注意保持测试的独立性和稳定性。在设计和实现代码时,应...

    运用反射得到类中的属性和值

    通过上述示例,我们可以看到如何利用Java反射机制获取一个类中的所有属性及其对应的值。这种方法非常适用于动态配置或解析对象的场景。需要注意的是,虽然反射提供了强大的功能,但它也存在一定的性能开销,因此在...

    JUnit4利用反射机制测试类的私有成员

    然而,对于类的私有成员(包括私有方法和私有属性),由于其封装性,通常不易直接进行测试。但实际情况中,私有成员可能对类的行为产生关键影响,因此测试它们也是必要的。本文将介绍如何使用JUnit4结合Java的反射...

    MediaController反射修改

    在Android开发中,反射常用于访问私有成员、调用私有方法或改变私有状态,以实现对系统组件的定制。 在"MediaController反射修改"这个主题中,开发者可能遇到以下关键知识点: 1. **MediaController类的理解**:...

    Java利用反射获取object的属性和值代码示例

    "Java利用反射获取object的属性和值代码示例" Java中的反射机制可以让我们在程序运行时动态地获取和修改对象的属性和值,这个技术非常有用,尤其是在一些框架和库的实现中。在这篇文章中,我们将通过一个实用的例子...

    实体对象属性动态化(私有属性来源为map)代码.rar

    本示例中的"实体对象属性动态化(私有属性来源为map)"是一个具体的应用场景,它利用Map来存储实体类的私有属性,从而实现属性的动态添加、修改和访问。下面我们将详细探讨这一技术。 1. **Map接口**:在Java中,Map...

    VB.NET 反射类属性名称

    4. 设置属性值:如果属性是可写的,可以使用`SetValue()`方法来改变它的值。 ```vbnet Dim newValue As Object = New ValueDataType() myProperty.SetValue(myInstance, newValue) ``` 请注意,`GetValue()`和`...

    Java Bean 遍历和使用注解给Bean的属性添加属性值

    - **访问和修改属性值**:使用`Field`的`get(Object obj)`和`set(Object obj, Object value)`方法可以读取和设置Bean实例的属性值。 - **遍历getter和setter**:`Class.getMethod(String name, Class&lt;?&gt;... ...

    JAVA反射机制动态调用 计算器对象的加法,减法函数;JAVA反射机制修改一个学生对象 的私有数据成员

    Java反射机制是Java语言提供的一种强大功能,它允许我们在运行时检查类、接口、字段...在上述示例中,我们展示了如何利用反射来实现计算器的动态调用和修改私有学生对象的属性,这些都展示了反射机制的灵活性和实用性。

    java反射遍历实体类属性和类型,并赋值和获取值的简单方法

    通过这些类,我们可以动态地获取类的信息,甚至在运行时调用私有方法和修改私有属性。 在给定的例子中,我们看到一个名为`GetModelNameAndType`的类,它有一个静态方法`testReflect`,该方法接受一个对象`model`...

    PHPUnit测试私有属性和方法功能示例

    同样,我们可以使用反射API中的`ReflectionClass`和`ReflectionProperty`来访问和修改私有属性的值。例如: ```php class TestSample { public function testPrivateProperty() { $reflectedClass = new ...

    Java反射机制的动态调用计算器的加法,减法函数;修改一个学生对象的私有数据成员

    在给定的场景中,我们利用反射机制实现了动态调用计算器的加法和减法函数,并修改了学生对象的私有数据成员。下面将详细讲解这些知识点。 首先,让我们关注`Calculator`类中的加法和减法函数。假设`Calculator`类有...

    反射机制demo

    在本例程中,我们将深入探讨如何利用反射机制来动态地修改对象的私有属性值。 首先,我们需要了解反射的核心类`java.lang.Class`,它是Java类的运行时表示。通过`Class`对象,我们可以获取到类的结构信息,如类名、...

    java反射机制工具类

    2. 调用私有方法和访问私有字段:通过反射,开发者可以绕过封装性,直接访问和修改私有成员,尽管这通常不推荐,但在某些特殊场景下可能是必要的。 3. 动态创建对象:利用`Class.forName()`方法,可以基于字符串形式...

    利用反射实现JavaBean 的自动赋值

    ### 利用反射实现JavaBean的自动赋值 在软件开发过程中,特别是在Web应用程序的开发中,经常会遇到需要将表单提交的数据绑定到JavaBean对象上的需求。这可以通过多种方式实现,例如使用Spring MVC等框架的自动绑定...

    pdf反射机制-java

    `Field`对象的`get()`和`set()`方法可以读取和修改对象的属性值,包括私有属性。 学习Java反射机制的重要性体现在以下几个方面: 1. 动态类型:反射机制允许我们在运行时检查对象的类型,这对于编写通用代码和处理...

    Java对象属性数据比较,返回变化数据

    // 允许访问私有属性 try { Object oldValue = field.get(oldObj); Object newValue = field.get(newObj); // 比较属性值 if (!Objects.equals(oldValue, newValue)) { diffResults.put(field.getName(),...

Global site tag (gtag.js) - Google Analytics