您应该能够从 Java 使用此 API,但与 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());
The 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());