2012-07-10 23 views
0

我有一個接收消息的應用程序。在消息中有可以編輯的字段。當該字段被更改時,應將其保存到數據庫中。不幸的是,setter只在setter的範圍內改變給定字段的值。任何想法爲什麼會發生?這是getter和setter代碼:安裝程序僅在設置程序的範圍內更改字段的值

public String getSenderCharges() { 
    Tag tag = swiftMessage.getBlock4().getTagByName("71F"); 
    String value = tag.getValue(); 
    Field71F field = new Field71F(value);   
    String senderCharges = field.getValue(); 
    return senderCharges; 
} 

public void setSenderCharges(String senderCharges) { 
    Tag tag = swiftMessage.getBlock4().getTagByName("71F"); 
    String value = tag.getValue(); 
    if(value.equals(senderCharges)){ 
     tag.setValue(value); 
    }else{ 
     tag.setValue(senderCharges); 
    } 
} 
+3

什麼是「妻子」標籤? – 2012-07-10 10:30:22

+0

用於將Swift消息解析爲XML格式的框架 – 2012-07-10 10:37:04

+2

@JigarJoshi http://www.prowidesoftware.com/en/wife-documentation.html – 2012-07-10 10:37:28

回答

1

您是creating a new object of Tag in setter method所以當你更新像tag.setValu e是setter方法外並不反映方法標記值。

標記對於s​​etter方法是本地的,它在setter方法外沒有作用域。

試試這個辦法 -

public void setSenderCharges(String senderCharges) { 
    String value = swiftMessage.getBlock4().getTagByName("71F").getValue(); 
    if(!value.equals(senderCharges)){ 
     swiftMessage.getBlock4().getTagByName("71F").setValue(senderCharges); 
    } 
} 
+0

我在那裏看不到任何「新標籤」 。你怎麼知道他在創造它? – 2012-07-10 10:35:26

+0

swiftMessage.getBlock4()。getTagByName(「71F」)正在返回Tag對象,這就是爲什麼Tag tag = swiftMessage.getBlock4()。getTagByName(「71F」);沒有給出anf編譯時間錯誤 – 2012-07-10 10:37:55

+0

標記被創建,這是正確的 – 2012-07-10 10:41:29

0

有一件事我注意到的是冗餘tag.setValue(value)。爲什麼要設定你剛剛從中得到的價值?您的整套方法相當於swiftMessage.getBlock4().getTagByName("71F").setValue(senderCharges)

爲什麼你沒有觀察到來自其他代碼的這種改變,從迄今爲止發佈的代碼看來並不明顯。也許是併發問題?

+0

我試過了,就像之前改變setter中的值,但一旦超出範圍值不會改變 – 2012-07-10 10:52:13

+0

您的問題將不會通過查看該行代碼來解決,這就是我的答案。其餘的只是一個附註。 – 2012-07-10 10:53:58

+0

是的,這是正確的,謝謝你的時間和筆記 – 2012-07-10 10:59:14

相關問題