Fieldsetter は、public でも private でも使用できる

yipran-core として作成した GenericBuilder
Wiki に、
 setter が存在しない public フィールドの時、
 と
 setter が存在しない private フィールドの時、
GenericBuilder#with メソッドの書き方の差を書いてしまったが、
実は、org.yipuran.util.Fieldsetter を使う方法では、private / public 両方使用可能だ。

https://github.com/yipuran/yipuran-core/wiki#genericbuildert

例えば、、

public class Foo{
   public String name;
   public String getName() {
      return name;
   }
}
public class FooWrap{
   public Foo foo;
   public Foo getFoo() {
      return foo;
   }
}

以下のように、Fieldsetter . of でセットできる

import org.yipuran.util.Fieldsetter;
import org.yipuran.util.GenericBuilder;
////
Foo foo = GenericBuilder.of(Foo::new).with(Fieldsetter.of((t, u)->"name"), "abc").build();
FooWrap fw = GenericBuilder.of(FooWrap::new).with(Fieldsetter.of((t, u)->"foo"), foo).build();

これは、以下のように確認できる。

String name = Optional.ofNullable(fw).map(e->e.getFoo()).map(e->e.getName()).orElse("not found");

あるいは、、

String name = Optional.ofNullable(fw).map(FooWrap::getFoo).map(Foo::getName).orElse("not found");