2017-09-24 114 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"); 
    });