Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
kotlin lambda作为参数传递给corda(v3.2)流引发kryo序列化异常_Corda - Fatal编程技术网

kotlin lambda作为参数传递给corda(v3.2)流引发kryo序列化异常

kotlin lambda作为参数传递给corda(v3.2)流引发kryo序列化异常,corda,Corda,我有一个用kotlin编写的Corda流,它以lambda为参数: class ApproveFlow(val arg1: String, val arg2: (Amount<Currency>) -> Amount<Currency>) : FlowLogic<SignedTransaction>() computeValue函数定义如下: @CordaSerializable interface Calculator { fun compu

我有一个用kotlin编写的Corda流,它以lambda为参数:

class ApproveFlow(val arg1: String, val arg2: (Amount<Currency>) -> Amount<Currency>) : FlowLogic<SignedTransaction>()
computeValue函数定义如下:

@CordaSerializable
interface Calculator {
    fun computeValue(purchasePrice: Amount<Currency>): Amount<Currency>
}

@CordaSerializable
class BasicCalculator  : Calculator {

    override fun computeValue(purchasePrice: Amount<Currency>): Amount<Currency> 
  { ...
    ...
    return 100.POUNDS

  }
}

将函数作为参数传递给流可能有点雄心勃勃。毕竟,节点需要对其进行评估,并对其进行检查点检查,以便稍后对其进行评估。如果您真的想这样做,您可以这样做:

val lambda=@CordaSerializable Runnable{whatever()}

val lambda=@CordaSerializable fun(){whatever()}


。。。。但我建议保持它的简单性,只传递到普通的旧数据对象中。是的,对象序列化功能强大。但伟大的力量带来伟大的责任

谢谢。如果我没有错的话,@CordaSerializable注释不适用于目标表达式或匿名函数?啊,你可能是对的。但我意识到它也不会工作,因为另一个原因-生成的lambda对象不会暴露getter,这意味着在Corda 4中,引擎会呕吐,因为它不知道如何读取对象。我想现在我们需要说这是不受支持的。
@CordaSerializable
interface Calculator {
    fun computeValue(purchasePrice: Amount<Currency>): Amount<Currency>
}

@CordaSerializable
class BasicCalculator  : Calculator {

    override fun computeValue(purchasePrice: Amount<Currency>): Amount<Currency> 
  { ...
    ...
    return 100.POUNDS

  }
}
is not annotated or on the whitelist, so cannot be used in serialization corda