2017-09-24 103 views
2

這裏是一個最小的工作例如:監聽工作,綁定不

public class FF { 

    @Test 
    public void test01() { 
    final ListProperty p = new SimpleListProperty(FXCollections.observableArrayList()); 
    p.addListener((ListChangeListener) c -> { 
     System.err.println("Listener here.."); 
    }); 
    Bindings.createObjectBinding(() -> { 
     System.err.println("Binding here"); 
     return null; 
    }, p); 

    p.add("hans"); 
    } 

    @Test 
    public void test02() { 
    final ListProperty p = new SimpleListProperty(FXCollections.observableArrayList()); 
    final ListProperty p2 = new SimpleListProperty(FXCollections.observableArrayList()); 
    p.addListener((ListChangeListener) c -> { 
     System.err.println("Listener 1 here.."); 
    }); 
    p2.addListener((ListChangeListener) c -> { 
     System.err.println("Listener 2 here.."); 
    }); 
    final ObjectBinding ob = Bindings.createObjectBinding(() -> { 
     System.err.println("Binding here"); 
     return null; 
    }, p); 
    p2.bind(ob); 
    p.add("hans"); 

    } 

} 

第二個測試看起來像預期,但對於第一次測試,輸出就是「監聽器在這裏..」。爲什麼綁定在這種情況下不起作用?

匿名偵聽器和匿名綁定有什麼區別?

回答

1

你已經創建了綁定對象,但沒有通過它綁定任何東西,所以它優化了它自己什麼都不做。

添加任何隨機操作來查看「綁定在這裏......」輸出。例如:

ObjectBinding<ObservableList> ob = Bindings.createObjectBinding(() -> { 
     System.err.println("Binding here"); 
     return null; 
    }, p); 
    ob.addListener((o) -> { 
     System.out.println("random action"); 
    });