更新不可变对象而不破坏不变性

Ale*_*rov 4 java performance scala immutability immutable-collections

如何从另一个不可变对象获取更新的不可变对象而不以良好的方式破坏不可变性。类似于 Scala 中的实现方式或 Immutables 库中的实现方式。

我怎样才能实现类似 Customer.Builder.from(anotherCustomer).replaceOrder(oldOrder,newOrder).with(newName).build()

重用旧对象并对我想要的所有更改进行排队,以便构造一个新对象。

我正在使用Java。

Gab*_*ica 6

public class Customer {
    private String name;    
    private Order order

    private Customer(CustomerBuilder builder) {
        this.name = builder.name;
        this.order = builder.order;
    }

    public Customer replace(Order order) {
        return new CustomerBuilder().name(this.name).order(order).build();
    }

    public static class CustomerBuilder {
        private String name;    
        private Order order

        public CustomerBuilder name(String name) {
            this.name = name;
            return this;
        }

        public CustomerBuilder order(Order order) {
            this.order = order;
            return this;
        }

        public Customer build() {
            return new Customer(this);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)