Java 8 consumer风格Builder

Posted Joynic

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 8 consumer风格Builder相关的知识,希望对你有一定的参考价值。

 1 public static class GenericBuilder<T> {
 2         private final Supplier<T> instantiate;
 3 
 4         private final List<Consumer<T>> consumers = new ArrayList<>();
 5 
 6         public GenericBuilder(Supplier<T> instantiate) {
 7             this.instantiate = instantiate;
 8         }
 9 
10         public static <T> GenericBuilder<T> of(Supplier<T> instantiator)  {
11             return new GenericBuilder<>(instantiator);
12         }
13 
14         public <U> GenericBuilder<T> with(BiConsumer<T, U> biConsumer, U value) {
15             Consumer<T> setOperationFunction = instance -> biConsumer.accept(instance, value);
16             consumers.add(setOperationFunction);
17             return this;
18         }
19 
20         public T build() {
21             T instance = instantiate.get();
22 
23             // loop call each set function with object instance!
24             consumers.forEach(consumer -> consumer.accept(instance));
25             consumers.clear();
26 
27             return instance;
28         }
29     }

 

使用:

 

 1 public class Dummy {
 2         private String name;
 3         private Integer age;
 4         private Boolean foreigner;
 5 
 6         public String getName() {
 7             return name;
 8         }
 9 
10         public void setName(String name) {
11             this.name = name;
12         }
13 
14         public Integer getAge() {
15             return age;
16         }
17 
18         public void setAge(Integer age) {
19             this.age = age;
20         }
21 
22         public Boolean getForeigner() {
23             return foreigner;
24         }
25 
26         public void setForeigner(Boolean foreigner) {
27             this.foreigner = foreigner;
28         }
29 
30 
31     }

 

Dummy build = GenericBuilder.of(Dummy::new).with(Dummy::setAge, 12)
                .with(Dummy::setName, "Vodoo")
                .with(Dummy::setForeigner, false).build();

 

以上是关于Java 8 consumer风格Builder的主要内容,如果未能解决你的问题,请参考以下文章

Java 8 - Predicate和Consumer接口函数式编程

Java 8 - Predicate和Consumer接口函数式编程

Java 8 新特性:2-消费者(Consumer)接口

java 8中撤销永久代,引入元空间

jvm系列:Java 8-从持久代到metaspace

com.android.builder.errors.EvalIssueException: android-apt plugin is incompatible with the Android(代