This generates a "telescoping" builder where every field must be filled, otherwise it's a compiler error.
To generate the builder, annotate a record class with @RecordBuilder and / or @RecordUpdater.
@RecordBuilder
@RecordUpdater
record Message(
String sender,
String body,
String recipient
) {
}The generated class will be called MessageBuilders.
@Generated
final class MessageBuilders {
// from @RecordBuilder annotation
static SenderStep builder()
private static class MessageBuilder implements SenderStep, BodyStep, RecipientStep {
@Override BodyStep sender(String sender)
@Override RecipientStep body(String body)
@Override Message recipient(String recipient)
}
interface SenderStep { BodyStep sender(String sender) }
interface BodyStep { RecipientStep body(String body) }
interface RecipientStep { Message recipient(String recipient) }
// from @RecordUpdater annotation
static MessageUpdater builder(Message message)
static class MessageUpdater {
MessageUpdater sender(String sender)
MessageUpdater body(String body)
MessageUpdater recipient(String recipient)
Message build()
}
}similar project: https://github.com/DanielLiu1123/recordbuilder