【问题标题】:corda implement generic vault querycorda 实现通用保险库查询
【发布时间】:2020-04-22 20:01:59
【问题描述】:

尝试创建此通用保管库查询方法:

        <T extends ContractState> List<StateAndRef<T>> getStatesByLinearId(T stateType, Class<T> cl, String linearId) {
        List<UniqueIdentifier> linearIds = singletonList(UniqueIdentifier.Companion.fromString(linearId));
        QueryCriteria linearCriteriaAll = new QueryCriteria.LinearStateQueryCriteria(null, linearIds, Vault.StateStatus.UNCONSUMED, null);

        return getServiceHub().getVaultService().queryBy(cl, linearCriteriaAll).getStates();
    }

我不确定如何获得 Class 的值。例如,我不确定如何调用此方法: getStatesByLinearId(IouState.class,??,linearId)

【问题讨论】:

    标签: java generics corda


    【解决方案1】:

    这有帮助吗?

    IouState state; // Assuming IouState extends or implements ContractState
    
    getStatesByLinearId(state, state.getClass(), linearId);
    // or, if you know the class beforehand
    getStatesByLinearId(state, IouState.class, linearId);
    

    【讨论】:

    • 我还没有状态实例来尝试您的第一个选项。对于第二个选项,如果我通过 IouState.class,我会收到一条错误消息,上面写着“期望类型 java.lang.class
    • 如果您没有实例,则需要从参数列表中删除 T stateType
    • expect type java.lang.class&lt;T&gt; 发生这种情况是因为 IouState 没有扩展 ContractState,或者您作为第一个参数传递的任何内容都没有类型 IouState
    猜你喜欢
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-06
    • 2019-03-20
    • 1970-01-01
    相关资源
    最近更新 更多