我正在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
,因此.isNotZero()
不在范围内。方法是否可以返回实例化它们的类型的方法(在我的情况下,我希望它返回
IntValidator
,而不是Validator<T>
)? 最佳答案
也许您应该重新考虑API设计。不链接方法而是使用范围函数呢?
val validator = IntValidator(myNullableInteger)
with(validator) {
isNotNull()
isNotZero()
}
在
IntValidator
的范围内,两种方法都可以访问。