FungibleAsset在Java中的实现无法编译(Corda 4.4)

huangapple 未分类评论45阅读模式
英文:

FungibleAsset implementation in Java won't compile (Corda 4.4)

问题

以下是已翻译的内容:

我试图实现一个名为 FungibleAsset 类型的简单状态,尽管看起来并不那么复杂,但却出现了编译错误。

错误:TestState 不是抽象的,也未覆盖 FungibleState 中的抽象方法 getAmount()。
public class TestState implements FungibleAsset {

错误:TestState 中的 getAmount() 无法实现 FungibleState 中的 getAmount()。
public Amount<Issued> getAmount() {

返回类型 Amount<Issued> 与 Amount<Issued<? extends Currency>> 不兼容,其中 T 是类型变量:T 在接口 FungibleState 中声明为扩展自 Object。

public class TestState implements FungibleAsset<Currency> {

    Amount<Issued<Currency>> amount;
    AbstractParty owner;

    @NotNull
    @Override
    public Amount<Issued<Currency>> getAmount() {
        return amount;
    }

    @NotNull
    @Override
    public Collection<PublicKey> getExitKeys() {
        return Arrays.asList(owner.getOwningKey());
    }

    @NotNull
    @Override
    public FungibleAsset<Currency> withNewOwnerAndAmount(@NotNull Amount<Issued<Currency>> newAmount, @NotNull AbstractParty newOwner) {
        return null;
    }

    @NotNull
    @Override
    public AbstractParty getOwner() {
        return owner;
    }

    @NotNull
    @Override
    public CommandAndState withNewOwner(@NotNull AbstractParty newOwner) {
        return null;
    }

    @NotNull
    @Override
    public List<AbstractParty> getParticipants() {
        return Arrays.asList(owner);
    }
}

虽然实现 FungibleState 没有问题,但我不明白出了什么问题,我确实覆盖了所需的方法。

英文:

I'm trying to implement a simple State of type FungibleAsset, even though it seems not that delicate, it gives a compilation error.

> error: TestState is not abstract and does not override abstract method
> getAmount() in FungibleState public class TestState implements
> FungibleAsset<Currency> {
>
>
> error: getAmount() in TestState cannot implement getAmount() in
> FungibleState public Amount<Issued<Currency>> getAmount() {
>
>
> return type Amount<Issued<Currency>> is not compatible with
> Amount<Issued<? extends Currency>> where T is a type-variable: T
> extends Object declared in interface FungibleState

public class TestState implements FungibleAsset&lt;Currency&gt; {

    Amount&lt;Issued&lt;Currency&gt;&gt; amount;
    AbstractParty owner;

    @NotNull
    @Override
    public Amount&lt;Issued&lt;Currency&gt;&gt; getAmount() {
        return amount;
    }

    @NotNull
    @Override
    public Collection&lt;PublicKey&gt; getExitKeys() {
        return Arrays.asList(owner.getOwningKey());
    }

    @NotNull
    @Override
    public FungibleAsset&lt;Currency&gt; withNewOwnerAndAmount(@NotNull Amount&lt;Issued&lt;Currency&gt;&gt; newAmount, @NotNull AbstractParty newOwner) {
        return null;
    }

    @NotNull
    @Override
    public AbstractParty getOwner() {
        return owner;
    }

    @NotNull
    @Override
    public CommandAndState withNewOwner(@NotNull AbstractParty newOwner) {
        return null;
    }

    @NotNull
    @Override
    public List&lt;AbstractParty&gt; getParticipants() {
        return Arrays.asList(owner);
    }
}

While implementing FungibleState works, I don't get what's exactly wrong, I do override required methods.

答案1

得分: 0

  • FungibleAsset接口已经有一个名为amount的成员变量,无需引入您自己的变量。
  • 正确的代码应该如下所示:
import net.corda.core.contracts.Amount;
import net.corda.core.contracts.CommandAndState;
import net.corda.core.contracts.FungibleAsset;
import net.corda.core.contracts.Issued;
import net.corda.core.identity.AbstractParty;
import org.jetbrains.annotations.NotNull;

import java.security.PublicKey;
import java.util.Collection;
import java.util.Currency;
import java.util.List;

public class TestState implements FungibleAsset<Currency> {
    @NotNull
    @Override
    public Amount<Issued<Currency>> getAmount() {
        return null;
    }

    @NotNull
    @Override
    public Collection<PublicKey> getExitKeys() {
        return null;
    }

    @NotNull
    @Override
    public FungibleAsset<Currency> withNewOwnerAndAmount(
                                       @NotNull Amount<Issued<Currency>> newAmount, 
                                       @NotNull AbstractParty newOwner) {
        return null;
    }

    @NotNull
    @Override
    public AbstractParty getOwner() {
        return null;
    }

    @NotNull
    @Override
    public CommandAndState withNewOwner(@NotNull AbstractParty newOwner) {
        return null;
    }

    @NotNull
    @Override
    public List<AbstractParty> getParticipants() {
        return null;
    }
}
英文:
  • FungibleAsset interface already has a member called amount; no need to introduce your own.
  • The correct code would look like this:
import net.corda.core.contracts.Amount;
import net.corda.core.contracts.CommandAndState;
import net.corda.core.contracts.FungibleAsset;
import net.corda.core.contracts.Issued;
import net.corda.core.identity.AbstractParty;
import org.jetbrains.annotations.NotNull;

import java.security.PublicKey;
import java.util.Collection;
import java.util.Currency;
import java.util.List;

public class TestState implements FungibleAsset&lt;Currency&gt; {
    @NotNull
    @Override
    public Amount&lt;Issued&lt;Currency&gt;&gt; getAmount() {
        return null;
    }

    @NotNull
    @Override
    public Collection&lt;PublicKey&gt; getExitKeys() {
        return null;
    }

    @NotNull
    @Override
    public FungibleAsset&lt;Currency&gt; withNewOwnerAndAmount(
                                       @NotNull Amount&lt;Issued&lt;Currency&gt;&gt; newAmount, 
                                       @NotNull AbstractParty newOwner) {
        return null;
    }

    @NotNull
    @Override
    public AbstractParty getOwner() {
        return null;
    }

    @NotNull
    @Override
    public CommandAndState withNewOwner(@NotNull AbstractParty newOwner) {
        return null;
    }

    @NotNull
    @Override
    public List&lt;AbstractParty&gt; getParticipants() {
        return null;
    }
}

huangapple
  • 本文由 发表于 2020年4月8日 19:56:54
  • 转载请务必保留本文链接:https://java.coder-hub.com/61100103.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定