public static void main(String[] args) {
    ListProperty<String> lp1 = new SimpleListProperty<>(FXCollections.observableArrayList());
    ListProperty<String> lp2 = new SimpleListProperty<>(FXCollections.observableArrayList());

    lp1.bind(lp2);

    print("Before addAll():", lp1, lp2);
    lp1.addAll("One", "Two");
    print("After addAll():", lp1, lp2);

    // Change the reference of the ObservableList in lp2
    lp2.set(FXCollections.observableArrayList("1", "2"));
    print("After lp2.set():", lp1, lp2);

    // Cannot do the following as lp1 is a bound property
    // lp1.set(FXCollections.observableArrayList("1", "2"));
    // Unbind lp1
    lp1.unbind();
    print("After unbind():", lp1, lp2);

    // Bind lp1 and lp2 bidirectionally
    lp1.bindBidirectional(lp2);
    print("After bindBidirectional():", lp1, lp2);

    lp1.set(FXCollections.observableArrayList("X", "Y"));
    print("After lp1.set():", lp1, lp2);
  }