Corda-新参数是必需的,应该可以为null,以便evolution工作
我一直在使用Corda Enterprise 3.2和SQL Server数据库运行CorDapp。最近更新了CorDapp后,我发现以下错误: 原因:java.io.NotSerializableException: net.corda.core.contracts.TransactionState-> net.corda.core.contracts.TransactionState-> 数据(net.corda.core.contracts.ContractState)-> 发票(java.util.Set)->java.util.Set->New 参数foo是必需的,应该可以为Null,以便evolution工作Corda-新参数是必需的,应该可以为null,以便evolution工作,corda,Corda,我一直在使用Corda Enterprise 3.2和SQL Server数据库运行CorDapp。最近更新了CorDapp后,我发现以下错误: 原因:java.io.NotSerializableException: net.corda.core.contracts.TransactionState-> net.corda.core.contracts.TransactionState-> 数据(net.corda.core.contracts.ContractState)-> 发票(java
升级为什么会导致此异常?Corda中的状态演化要求添加到状态的所有新字段都可以为null,因为它们可能是从没有字段的状态的早期版本创建的,null是针对新对象结构实例化状态的唯一逻辑选项 例如
data class OldState(val foo: Int)
data class NewState(val foo: Int, var bar: String? = null)
从
OldState
升级到NewState
会将foo
映射到foo
,因为属性相同,但会将bar
保留为空,因为在以前的状态中没有任何内容可以用不可为空的值填充该字段。Corda中的状态演化要求添加到该状态的所有新字段都可以为空,因为它们可能是从没有该字段的状态的以前版本创建的,nullable是针对新对象结构实例化状态的唯一逻辑选项
例如
data class OldState(val foo: Int)
data class NewState(val foo: Int, var bar: String? = null)
从OldState
升级到NewState
会将foo
映射到foo
,因为属性相同,但会将bar
保留为null,因为在以前的状态中没有任何内容可以用不可为null的值填充该字段