4

不変性を良い方法で壊すことなく、別の不変オブジェクトから更新された不変オブジェクトを取得するにはどうすればよいですか。Scala で物事が達成される方法や、Immutables ライブラリで達成される方法に似たもの。

Customer.Builder.from(anotherCustomer).replaceOrder(oldOrder,newOrder).with(newName).build() のようなものを達成するにはどうすればよいですか

新しいオブジェクトを構築するために、古いオブジェクトを再利用し、必要なすべての変更をキューに入れます。

私はJavaを使用しています。

4

4 に答える 4

5
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);
        }
    }
}
于 2016-04-05T08:33:47.083 に答える
1

主題をカバーするこの本をお勧めします: https://www.amazon.ca/Effective-Java-Edition-Joshua-Bloch/dp/0321356683

不変オブジェクトを更新するために私が知っている最善の方法は、Java String のようなオブジェクトの変更されたコピーを返すことです

    String uppercase = "hello".toUpperCase()

流暢なタイピングを使いやすくします

    String uppercasewithoutletterL = "hello".toUpperCase().replace("L","")
于 2016-04-04T20:06:42.350 に答える
0

オブジェクト型でCloneableインターフェイスを実装できます。別のオプションは、既存のインスタンスから新しいインスタンスを作成できる不変オブジェクトのビルダーを用意することです。あの奴らがやったような何か...

于 2016-04-04T20:07:39.973 に答える