Если я моделирую свои объекты значений с использованием классов данных Kotlin, то какой метод лучше всего подходит для проверки. Кажется, что блок init является единственным логическим местом, поскольку он выполняется после основного конструктора.
data class EmailAddress(val address: String) {
init {
if (address.isEmpty() || !address.matches(Regex("^[a-zA-Z0-9][email protected][a-zA-Z0-9]+(.[a-zA-Z]{2,})$"))) {
throw IllegalArgumentException("${address} is not a valid email address")
}
}
}
Использование примера JSR-303
Недостатком этого является то, что требуется ткать время загрузки
@Configurable
data class EmailAddress(@Email val address: String) {
@Autowired
lateinit var validator: Validator
init {
validator.validate(this)
}
}