Вы должны иметь возможность использовать этот API из Java, с некоторыми дополнительными помехами по сравнению с версией Scala.Несколько удобных полей немного успокоят:
object Builder {
def apply() = new Builder[TFalse]
val unassigned = =:=.tpEquals[TFalse]
val assigned = =:=.tpEquals[TTrue]
}
Код клиента Java должен выглядеть так:
Builder$.MODULE$.apply()
.withProperty(10, Builder$.MODULE$.unassigned())
.build(Builder$.MODULE$.assigned());
Метод build
должен проверять, назначено ли каждое свойство, поэтому он становится довольно шумным, когда вы обобщаете на несколько свойств:
Builder$.MODULE$.apply()
.withProp1(10, Builder$.MODULE$.unassigned())
.withProp2(20, Builder$.MODULE$.unassigned())
.withProp3(30, Builder$.MODULE$.unassigned())
// ...
.build(Builder$.MODULE$.assigned(),
Builder$.MODULE$.assigned(),
Builder$.MODULE$.assigned(),
//...
);
С некоторыми статическими делегатами в классе помощника (и некоторыми статическими импортами) вы сможете получить что-то вроде:
createBuilder()
.withProp1(10, unassigned())
.withProp2(20, unassigned())
.build(assigned(), assigned());