validation数据类参数Kotlin
如果我使用Kotlin数据类为我的值对象建模,那么处理validation的最佳方法是什么? 看起来像init块是唯一的逻辑地方,因为它在主构造函数之后执行。
data class EmailAddress(val address: String) { init { if (address.isEmpty() || !address.matches(Regex("^[a-zA-Z0-9]+@[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) } }
实际上,validation看起来不是数据类的责任。 data
说明了它自己 – 它用于数据存储。
-
因此,如果您想validation数据类,那么在构造函数的参数上设置
@get:
validation将会非常有意义,并且会在class中的data class之外validation,负责构造。 -
你的第二个选择是不使用数据类,只需使用简单的类,并在构造函数中传递validation器的整个逻辑
-
另外,如果你使用Spring框架 – 你可以使用这个类的Bean作为原型,但是使用这种types的意大利面代码会让人感到不舒服:)
- Kotlin:通过转换修改(不可变的)列表,这是否合法?
- 在kotlin中,如何使主构造函数的setter属性为private?
- 在Kotlin中,我可以创建一个向后计数的范围吗?
- 运行Kotlin代码时,Android Studio会抛出java.lang.ClassNotFoundExceptionexception
- 如何从静态函数返回Template 时使用null来获取正确的types
- types推断在kotlin中失败
- kotlin列表上的filterNotNull具有genericstypes
- 转换Android项目与数据绑定从Java到Kotlin
- 将Java Parcel创建者代码转换为Kotlin