0

メッセージを受信するアプリケーションがあります。メッセージには、編集可能なフィールドがあります。フィールドが変更されたら、データベースに保存する必要があります。残念ながら、セッターは指定されたフィールドの値をセッターのスコープ内でのみ変更します。なぜそれが起こるのですか?これはゲッターとセッターのコードです:

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);
    }
}
4

2 に答える 2

1

eのcreating a new object of Tag in setter methodようなメソッドで Tag の値を更新するとtag.setValu、setter メソッドの外では反映されません。

タグは setter メソッドに対してローカルであり、setter メソッドの外側にはスコープがありません。

この方法を試してください -

public void setSenderCharges(String senderCharges) {
    String value = swiftMessage.getBlock4().getTagByName("71F").getValue();
    if(!value.equals(senderCharges)){
       swiftMessage.getBlock4().getTagByName("71F").setValue(senderCharges);
    }
}
于 2012-07-10T10:33:10.327 に答える
0

私が気づいたことの1つは、冗長tag.setValue(value)です。取得したばかりの値を設定する理由は何ですか? set-method 全体は と同等swiftMessage.getBlock4().getTagByName("71F").setValue(senderCharges)です。

他のコードからこの変更を観察していない理由は、これまでに投稿したコードからはまったく明らかではありません。多分同時性の問題?

于 2012-07-10T10:39:54.397 に答える