Реализация FungibleAsset в Java не будет компилироваться (Corda 4.4) - PullRequest
0 голосов
/ 08 апреля 2020

Я пытаюсь реализовать простое состояние типа FungibleAsset, даже если оно кажется не таким деликатным, оно выдает ошибку компиляции.

ошибка: TestState не является абстрактным и не переопределяет абстрактное Метод getAmount () в FungibleState публикуется c класс TestState реализует FungibleAsset {

error: getAmount () в TestState не может реализовать getAmount () в FungibleState publi c Amount> getAmount () {

тип возвращаемого значения Amount> не совместим с Amount>, где T является переменной типа: T расширяет объект, объявленный в интерфейсе FungibleState

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 я не понимаю, что именно неправильно, я переопределяю необходимые методы.

1 Ответ

0 голосов
/ 08 апреля 2020
  • 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;
    }
}
...