如何在 Vaadin 中编辑不可变对象列表?

How do can I edit List of Immutable objects in Vaadin?

MyObj 是不可变的,因此无法编辑它们,但我应该能够在列表中交换它们。我该如何实现?

这是我的 Vaadin 网格:

List<MyOBj> data = new ArrayList<>();
data.add(new MyObj(..));
data.add(new MyObj(..));
Grid<MyOBj> grid = new Grid<>(MyOBj.class);
grid.setItems(data);
grid.getEditor().setEnabled(true);
grid.addColumn(MyObj::someField).setCaption("someField");

如果 MyObj 可变,我会绑定编辑器:

Binder<MyOBj> binder = grid.getEditor().getBinder();
Binding<MyOBj, Boolean> binding = binder.bind(..binding setters/getter..);
column.setEditorBinding(binding);

现在我正在寻找这样的东西:

Binder<MyOBj> binder = grid.getEditor().getBinder();
Binding<MyOBj, Boolean> binding = binder.bind(..creating new Object and put on the given index of the list..);
column.setEditorBinding(binding);

这可能吗?

我想到了两个通用解决方案:

  1. 定义您在编辑对象时使用的可变 DTO。用户保存他们的编辑后,您将根据 DTO 中的当前值创建一个新的不可变 MyObj 实例。
  2. 更改 Binder 以编辑对 MyObj 的引用,而不是直接编辑 MyOjb。这样做的一种实用方法是 Binder<AtomcReference<MyObj>>.
  3. ,尽管语义不匹配很小。