不通过getXXX()方法获取类的私有域:
public class TestPrintBean {
private String priveteField;
private String priveteField2;
protected String protectedField;
public String publicField;
/**
* @return the priveteField
*/
public String getPriveteField() {
return priveteField;
}
/**
* @param priveteField
* the priveteField to set
*/
public void setPriveteField(String priveteField) {
this.priveteField = priveteField;
}
/**
* @return the priveteField2
*/
public String getPriveteField2() {
return priveteField2;
}
/**
* @param priveteField2
* the priveteField2 to set
*/
public void setPriveteField2(String priveteField2) {
this.priveteField2 = priveteField2;
}
/**
* @return the protectedField
*/
public String getProtectedField() {
return protectedField;
}
/**
* @param protectedField
* the protectedField to set
*/
public void setProtectedField(String protectedField) {
this.protectedField = protectedField;
}
/**
* @return the publicField
*/
public String getPublicField() {
return publicField;
}
/**
* @param publicField
* the publicField to set
*/
public void setPublicField(String publicField) {
this.publicField = publicField;
}
}
public class PrintUtil {
/**
* this method can print all the not-null value of fields that the given
* object has.
*
* @param obj
* : any object that you want to print
*/
public static void print(Object obj) {
try {
// get the object's class
Class clazz = obj.getClass();
// get all the fields that this object has
Field[] fields = clazz.getDeclaredFields();
String fieldName = "";
Object fieldValue;
if (fields != null && fields.length > 0) {
for (int i = 0; i < fields.length; i++) {
Field field = fields[i];
// if and only if we set accessible to true,
// we can access all fields, no matter which scope it is
field.setAccessible(true);
fieldValue = field.get(obj);
if (fieldValue != null) {
fieldName = field.getName();
System.out.println(fieldName + ":\t\t" + fieldValue);
}
}
}
} catch (Exception e) {
throw new RuntimeException("can not print ["
+ obj.getClass().getName() + "] field");
}
}
// this is for test
public static void main(String[] args) {
TestPrintBean tpb = new TestPrintBean();
tpb.setPriveteField("this is a value of private field");
tpb.setProtectedField("this is a value of protected field");
tpb.setPublicField("this is a value of public field");
print(tpb);
}
}
分享到:
相关推荐
资源介绍: 学习过其他语言的同学都知道,类都是有公共属性的,可以直接用赋值的方式来修改,但易语言只有私有成员,无法直接用赋值的方式来改动私有成员的数据值,这个例程演示了如何把内部私有成员的数据地址跟...
### 私有成员访问 在C#中,类的成员可以声明为私有(private),这意味着它们在类的外部不能被直接访问。然而,反射提供了一种方式来突破这个限制,允许在特定情况下访问这些私有成员。但请注意,这通常不建议在常规...
学习过其他语言的同学都知道,类都是有公共属性的,可以直接用赋值的方式来修改,但易语言只有私有成员,无法直接用赋值的方式来改动私有成员的数据值,这个例程演示了如何把内部私有成员的数据地址跟外部变量的变量...
学习过其他语言的同学都知道,类都是有公共属性的,可以直接用赋值的方式来修改,但易语言只有私有成员,无法直接用赋值的方式来改动私有成员的数据值,这个例程演示了如何把内部私有成员的数据地址跟外部变量的...
易语言从外部访问类的私有成员源码,从外部访问类的私有成员,私有成员外部初始化,测试_输出私有成员的值,子程序_说明,取变量数据地址_ASM,变量_ASM变量地址还原数据指针,变量_ASM变量地址指向新数据地址
易语言从外部访问易语言类的私有成员源码.rar 易语言从外部访问易语言类的私有成员源码.rar 易语言从外部访问易语言类的私有成员源码.rar 易语言从外部访问易语言类的私有成员源码.rar 易语言从外部访问易语言类...
根据提供的代码示例和描述,我们可以深入探讨C++中如何强制访问类的私有成员以及相关的技术细节。这里的关键在于理解C++中的内存布局、类型转换以及预处理器指令的使用。 ### C++中的内存布局 在C++中,类的成员...
在C++编程语言中,"外部访问类的私有成员+修改虚表"是一个涉及到类的封装、继承和多态性的高级话题。首先,我们来理解每个关键词的意义: 1. **私有成员(Private Members)**:在面向对象编程中,类的成员变量和...
使用 `setAccessible()` 方法设置私有成员变量的可访问性为 true。 4. 修改私有成员变量的值 使用 `set()` 方法修改私有成员变量的值。 实例代码 在以下代码中,我们将使用反射机制来修改私有成员变量的值: ```...
本压缩包文件"易语言源码从外部访问易语言类的私有成员源码.rar"中,将详细介绍如何在易语言中打破常规,实现从外部访问类的私有成员。 首先,理解私有成员的作用至关重要。私有成员的存在是为了确保类的内部状态不...
通常,私有成员是不可直接访问的,但反射允许我们绕过这种限制。要调用私有方法,我们需要使用`Method`类,先获取到该方法的`Method`对象,然后通过`setAccessible(true)`将其访问权限设为可访问,最后通过`invoke()...
例如,在上面的代码中,我们定义了 `getX` 和 `getY` 函数,返回私有成员变量 `x` 和 `y` 的值,然后在 `main` 函数中使用这些函数来访问私有成员变量。 4. 利用引用访问私有数据成员 这个方法利用引用来访问私有...
标题“析构或构造函数声明为保护或私有成员”所对应的知识点主要是关于C++语言中构造函数和析构函数的访问控制。 在C++语言中,构造函数和析构函数可以被声明为私有或保护成员,以达到特定的设计目的。将构造函数和...
1. **安全性问题**:随意访问类的私有成员可能会破坏封装性,导致不可预测的行为。因此,这种做法应谨慎使用。 2. **性能影响**:反射操作通常比直接访问成员慢得多,因此在性能敏感的应用程序中应避免使用。 3. **...
通常,私有成员(包括字段和方法)在其定义的类内部是可访问的,但在类的外部以及子类中是不可见的。然而,这并不意味着私有成员不能被子类继承,而是它们在子类中是不可直接访问的。 在Java中,类的成员修饰符主要...
- 访问私有成员。 - 调用未绑定的方法。 - 获取类型的信息。 ### 二、C#反射实现访问类中的私有变量或方法 #### 2.1 示例代码分析 首先,我们来看一下提供的示例代码: ```csharp using System; using System....
3. **设置访问权限**:由于私有成员变量默认不允许外部访问,因此我们需要使用Field对象的`setAccessible(true)`方法,将其可访问性设置为true,这样就可以绕过访问控制检查。 4. **修改成员变量值**:最后,通过...
虽然这种方法提供了一种绕过私有成员访问限制的方法,但在实际开发中应当谨慎使用。过度依赖这种技术可能会破坏封装原则,导致代码难以维护。此外,还需要注意的是,这种方式只适用于虚函数,对于私有的数据成员仍然...