2017-01-21 155 views
0

如何獲得watched這是「新價值」的價值?獲取觀察對象的價值?

代碼從here

import java.util.Observable; 
import java.util.Observer; 

class ObservedObject extends Observable { 
    private String watchedValue; 

    public ObservedObject(String value) { 
    watchedValue = value; 
    } 

    public void setValue(String value) { 

    // if value has changed notify observers 
    if(!watchedValue.equals(value)) { 
    watchedValue = value; 

    // mark as value changed 
    setChanged(); 
    } 
    } 
} 

public class ObservableDemo implements Observer { 
    public String name; 
    public ObservableDemo(String name) { 
    this.name = name; 
    } 

    public static void main(String[] args) { 
    // create watched and watcher objects 
    ObservedObject watched = new ObservedObject("Original Value"); 

    // watcher object listens to object change 
    ObservableDemo watcher = new ObservableDemo("Watcher"); 

    // add observer to the watched object 
    watched.addObserver(watcher); 

    // trigger value change 
    System.out.println("setValue method called..."); 
    watched.setValue("New Value"); 

    // check if value has changed 
    if(watched.hasChanged()) 
    System.out.println("Value changed" + new value of watched!); // that's what I want. ("New Value") 
    else 
    System.out.println("Value not changed"); 
    } 

    public void update(Observable obj, Object arg) { 
    System.out.println("Update called"); 
    } 
} 

輸出:

setValue method called... 
Value changed 

40行:

System.out.println("Value changed" + new value of watched!); // that's what I want. 

求購輸出:

setValue method called... 
Value changed to New Value 

回答

0

您已經在setValue形式的setter方法所以現在只實現相應的getter方法:

import java.util.Observable; 
import java.util.Observer; 

class ObservedObject extends Observable { 
    private String watchedValue; 

    public ObservedObject(String value) { 
     this.watchedValue = value; 
    } 

    public String getWatchedValue() { 
     return watchedValue; 
    } 

    public void setWatchedValue(String value) { 
     if (!watchedValue.equals(value)) { 
      this.watchedValue = value; 
      setChanged(); 
     } 
    } 
} 

public class ObservableDemo implements Observer { 
    public String name; 

    public ObservableDemo(String name) { 
     this.name = name; 
    } 

    public static void main(String[] args) { 
     ObservedObject watched = new ObservedObject("Original Value"); 
     ObservableDemo watcher = new ObservableDemo("Watcher"); 
     watched.addObserver(watcher); 
     System.out.println("setValue method called..."); 
     watched.setWatchedValue("New Value"); 
     if (watched.hasChanged()) { 
      System.out.println("Value changed: " + watched.getWatchedValue()); 
     } else 
      System.out.println("Value not changed"); 
    } 

    public void update(Observable obj, Object arg) { 
     System.out.println("Update called"); 
    } 
} 

輸出:

setValue method called... 
Value changed: New Value 
0

可以通過提供一個從可觀察訪問新價值getter函數,如下所示,並調用notifyObservers();setValue(String value)

class ObservedObject extends Observable { 
    private String watchedValue; 

    public ObservedObject(String value) { 
    watchedValue = value; 
    } 

    public void setValue(String value) { 

    // if value has changed notify observers 
    if(!watchedValue.equals(value)) { 
    watchedValue = value; 

    // mark as value changed 
    setChanged(); 
    notifyObservers(); 
    } 
    } 
    public String getValue(){ 
    return watchedValue ; 
    } 
} 

內,修改下面的方法來獲取新值

public void update(Observable obj, Object arg) { 
    System.out.println("Update called :"+obj.getValue()); 
}