英文:
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<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);
}
}
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 calledamount
; 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<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;
}
}
专注分享java语言的经验与见解,让所有开发者获益!
评论