2017-04-19 9 views
1

私は同じようにそれを呼び出すことができるようにしたいと思い、私の人生ラムダベースの流暢なビルダーを構築するにはどうすればいいですか?

を簡素化するためにjava.util.Optionalに基づいてされているJava流暢ビルダーを作成したいと思います。私の例では

Person person = Optional.supply(Person::new) 
       .with(Person::setName,"Andrew") 
       .with(Person::setAge,32) 
       .with(Person::setAddress,"10 Downing Street") 
       .get(); 

を、私は呼ばれていますnew classオリジナルと全く同じオプション。実際、私はソースコードをコピーして拡張できませんでした。

私は、コンストラクタ

public static <T> Optional<T> supply(Supplier<T> supplier) 
{ 
    T value = requireNonNull(supplier).get(); 
    return new Optional<T>(value); 
} 

を実装できる。しかし、私は流暢なセッターを実装する方法がわかりません。それは保有エンティティの値を設定し、オプション自己を返します。

セッターは、ターゲットプロパティの型のConsumerです。

どのように私は自分の流暢を構築するのですか?オプションですか?

答えて

1

少しの研究の後、私はセッターがTとVのちょうどBiConsumerであることがわかりました。ここで、Tはエンティティタイプ、Vはプロパティタイプです。

後世

の共有

public <H> Optional<T> with(BiConsumer<T, H> setter, H value) 
{ 
    requireNonNull(setter); 

    if (!isPresent()) 
     return empty(); 

    setter.accept(this.value, value); 

    return this; 
} 

を使用することができます流暢なオプションのセッターを構築したい人は誰でも

関連する問題