2012-10-15 120 views
1

我正在試圖建模Cobol系統的Java框架中工作。我有一個有很多屬性的類StudentRecord。調用父對象內的屬性對象的方法

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

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

} 

假設我有一個instanse studentA類型的StudentRecord,字符串中的firstName值是'Max'。我想使用Java反射將屬性firstName更新爲'John'。通常,我做如下:

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

因爲這個框架是模型Cobol,它有一些奇怪的行爲和要求。其中之一是我需要使用CobolString的setValue()方法爲firstName設置新的值,以確保系統正常工作。

例如:無反射,它需要我做:

studentA.firstName.setValue("John"); 

與反思,如果我這樣編寫下,studentA仍然有新的名字,但它變得陌生到其他對象/方法和斜面與他人一起工作!

那麼我怎樣才能使用Java反射來爲firstName設置新的值。我的意思是我如何從父對象studentA獲取子對象firstName,然後用新值「John」在其上調用方法「setValue」。

感謝您的幫助。

回答

4

可以使用反射來訪問一個實例字段:

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); 
+0

是的,我看到的更新。我很難理解OP在尋找什麼。我認爲就是這樣。 +1。 –

+0

非常感謝。這就是我要找的。 – bnguyen82