Type-safe Builders in Kotlin: Stop Making Those Silly Mistakes
['Baljeet Singh']
ProAndroidDev - Medium
data class Email(val to: String,val subject: String,val body: String,val from: String?
Kotlin’s @DslMarker makes building DSLs super easy:@DslMarkerannotation class EmailDsldata class Email(val to: String,val subject: String,val body: String,val from: String?
= null,val cc: List<String> = emptyList(),val bcc: List<String> = emptyList())@EmailDslclass EmailBuilder {lateinit var to: Stringlateinit var subject: Stringlateinit var body: Stringvar from: String?
() -> Unit): Email {return EmailBuilder().apply(block).build()}Usage is clean and readable:val email = email {to = "user@example.com"subject = "Welcome!"
Here’s how I built one with Retrofit:@DslMarkerannotation class HttpDsldata class ApiRequest(val url: String,val method: String,val headers: Map<String, String>,val queryParams: Map<String, String>,val body: String?)