Validation Kotlin-如何验证数据类

Validation Kotlin-如何验证数据类,validation,kotlin,Validation,Kotlin,我有一门课: class Foo{ var x:Long = 10 set(value) {if( value < 0 ) throw IllegalArgumentException("error"); field=value} } 可能吗?我希望它是轻量级的-没有反射,只是检查定居者。有什么建议吗 也许我晚了一点。您可以使用library类。验证成功时返回Result.Ok,验证失败时返回Result.Errors。 当您需要组合多个验证结果时,它还提供了一个简单的API

我有一门课:

class Foo{
  var x:Long = 10
    set(value) {if( value < 0 ) throw IllegalArgumentException("error"); field=value}
}

可能吗?我希望它是轻量级的-没有反射,只是检查定居者。有什么建议吗

也许我晚了一点。您可以使用library类。验证成功时返回Result.Ok,验证失败时返回Result.Errors。 当您需要组合多个验证结果时,它还提供了一个简单的API。见第节。对于您的情况,您可以:

data class private constructor Positive(val value: Long){
     companion object {
         fun of(x: Long) = 
            if(x < 0) "$x is not positive. Should be positive".error()
            else Positive(x).ok()
     }
}

fun addPositives(x: Positive, y: Positive, z: Positive): Long = 
    x.value + y.value + z.value

val added: Result<Long> = ::addPositives.curry()
    .on(Positive.of(1))
    .on(Positive.of(-1)) // This is invalid -> returns Result.Errors
    .on(Positive.of(2))
    .result

when(added){
    is Result.Ok -> added.toString()
    is Result.Errors -> added.description  
}.run { println(this) } // This is going to print "-1 is not positive. Should be positive"
数据类私有构造函数正(val值:Long){
伴星{
乐趣(x:Long)=
如果(x<0)“$x不是正的。应该是正的”。错误()
else正(x).ok()
}
}
趣味添加正片(x:正片,y:正片,z:正片):长=
x、 值+y.值+z.值
添加的val:Result=::addPositives.curry()
.on(第(1)项中的正项)
.on(正的.of(-1))//这是无效的->返回结果。错误
.on(第(2)项中的正项)
.结果
何时(添加){
是Result.Ok->added.toString()
is Result.Errors->added.description
}.run{println(this)}//这将打印“-1不是正数。应该是正数”

检查此答案:您还可以实现自己的“积极”委托
data class private constructor Positive(val value: Long){
     companion object {
         fun of(x: Long) = 
            if(x < 0) "$x is not positive. Should be positive".error()
            else Positive(x).ok()
     }
}

fun addPositives(x: Positive, y: Positive, z: Positive): Long = 
    x.value + y.value + z.value

val added: Result<Long> = ::addPositives.curry()
    .on(Positive.of(1))
    .on(Positive.of(-1)) // This is invalid -> returns Result.Errors
    .on(Positive.of(2))
    .result

when(added){
    is Result.Ok -> added.toString()
    is Result.Errors -> added.description  
}.run { println(this) } // This is going to print "-1 is not positive. Should be positive"