java - 在父对象中调用属性对象的方法

标签 java reflection cobol

我在 Java 框架中工作,该框架试图为 Cobol 系统建模。我有一个具有许多属性的 StudentRecord 类。

class StudentRecord extend BaseRecord {
...
 public CobolString firstName;
 public CobolString lastName;
...
}

class CobolString {
...
 private String content;
 public setValue(String str){
 content = str;
}

}

假设我有一个 StudentRecord 类型的实例 studentA,String 中的 firstName 值为“Max”。我想使用 Java 反射将属性 firstName 更新为“John”。通常,我会按以下方式进行操作:

Class  aClass = studentA.class;
Field field = aClass.getField("firstName");
field.set(studentA, new CobolString("John"));

因为这个框架是为Cobol建模的,所以它有一些奇怪的行为和要求。其中之一是我需要使用 CobolString 的方法 setValue() 为 firstName 设置新值以确保系统正常工作。

例如:没有反射(reflection),要求我做:

studentA.firstName.setValue("John");

反射(reflection)一下,如果我那样编码,studentA 仍然有新的名字,但它对其他对象/方法变得陌生,无法与其他人一起工作!!!

那么我如何使用 Java 反射来为 firstName 设置新值来做同样的事情。我的意思是我如何从父对象 studentA 获取子对象 firstName,然后使用新值“John”对其调用方法“setValue”。

感谢您的帮助。

最佳答案

您可以使用反射访问实例的字段:

StudentRecord obj;
Field field = obj.getClass().getField("firstName"); // or StudentRecord.class.getField()
CobolString cs = (CobolString)field.get(obj);
cs.setValue("John");

如果字段是private,在调用Field.get()之前执行:

field.setAccessible(true);

关于java - 在父对象中调用属性对象的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12899479/

相关文章:

java - 如何设置根据当前时间自动创建文件名?

java - 如何影响反射中方法的顺序

c# - 如何使用反射访问数组项属性?

java - COBOL 数据类型转换 : Number to Packed Numeric, 打包日期 COMP-3

java - 从 JSP 页面运行 java 应用程序

java - 如何在Java中拆分括号和,

c# - Reflect.Emit 动态类型内存爆炸

java - COBOL 和 Java 的架构

cobol - 如何在 COBOL 中编写比最大 LRECL 长的输出?

java - 如果 try block 突然完成怎么办?