我正在 Kotlin 中构建一个验证库。基类是abstract
并实现适用于所有类型的方法;isNotNull
例如:
abstract class Validator<V>(protected val value: V?) {
fun isNotNull(): Validator<V> {
if(value == null) {
// ... some validation handling here ...
}
return this
}
}
然后我对特定类型的验证器进行子类化:
class IntValidator(value: Int?) : Validator<Int>(value) {
fun isNotZero(): IntValidator {
if(value == 0) {
// ... some validation handling here ...
}
return this
}
}
现在说我想验证一个 Int?不为空且不为零
val validator = IntValidator(myNullableInteger)
validator
.isNotNull()
.isNotZero()
上面的代码不起作用,因为.isNotNull()
回报Validator<V>
, 而不是IntValidator
, so .isNotZero()
不再在范围内。
有没有办法让方法返回实例化它们的类型(在我的例子中,我希望它返回IntValidator
, not Validator<T>
)?
也许你应该重新考虑 API 设计。不链接方法并使用作用域函数怎么样?
val validator = IntValidator(myNullableInteger)
with(validator) {
isNotNull()
isNotZero()
}
在一个范围内IntValidator
,这两种方法都可以访问。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)