- Published on
Kotlin Class with Constructor Fields that are not Bean Properties
- Authors
- Name
- Yair Mark
- @yairmark
One of the most awesome things with Kotlin is how it removes huge amounts of boilerplate code when defining beans. If you want a bean field which is mutable you define it as a var
which means it will have getters, setters and constructor injection. If on the other hand you want a bean field that is immutable you make it a val
, this will force you to constructor inject it and provide a getter and no setter for you to use. But what if you simply want to pass a value into the constructor to be used internally in the class but not be exposed again and not be a bean field? You simply do not define it as a val
or a var
. The only caveat with this approach is that your class cannot be a data
class.
The code below illustrates this best:
package com.test
class ClassWithNoneBeanFields(someNoneBeanField: String, val immutableBeanField: String, var mutableBeanField: String) {
private val upperCasedField = someNoneBeanField.toUpperCase()
override fun toString(): String {
return "ClassWithNoneBeanFields(immutableBeanField='$immutableBeanField', mutableBeanField='$mutableBeanField', upperCasedField='$upperCasedField')"
}
}
fun main(args: Array<String>) {
val noneBeanFields = ClassWithNoneBeanFields("bLah", "John", "Smith")
println(noneBeanFields)
noneBeanFields.mutableBeanField = "Doe"
println(noneBeanFields)
}
ClassWithNoneBeanFields(immutableBeanField='John', mutableBeanField='Smith', upperCasedField='BLAH')
ClassWithNoneBeanFields(immutableBeanField='John', mutableBeanField='Doe', upperCasedField='BLAH')