Java 在枚举内使用接口

Java 在枚举内使用接口,java,interface,enums,Java,Interface,Enums,我正在处理枚举和接口,但是我似乎无法将我实现的“moneyType”接口添加到枚举中,我无法找到解决方案。 基本上:moneyType是红色下划线的,我不知道如何才能正确使用它 package Se.lucas.Main; public enum moneyTypes implements moneyType { DOLLAR(moneyType, 15, "Dollar"), EURO(moneyType, 15, "Dollar"), FRANK(moneyType, 15, "

我正在处理枚举和接口,但是我似乎无法将我实现的“moneyType”接口添加到枚举中,我无法找到解决方案。 基本上:moneyType是红色下划线的,我不知道如何才能正确使用它

package Se.lucas.Main;

public enum moneyTypes implements moneyType {

DOLLAR(moneyType, 15, "Dollar"),
 EURO(moneyType, 15, "Dollar"), 
  FRANK(moneyType, 15, "Dollar"),
   MARK(moneyType, 15, "Dollar"),
    POUND(moneyType, 15, "Dollar");

private moneyType type;
private int amount;
private String moneyName;

moneyTypes(moneyType type, int amount, String name) {
    type = this.type;
    amount = this.amount;
    name = this.name();
}


@Override
public int getMoney() {
    return this.amount;

}

@Override
public String getMoneyName() {
    return this.name();
}

@Override
public String getMessage() {
    return "got the message";
}

}

package Se.lucas.Main;

public interface moneyType {


public int getMoney();
public String getMoneyName();
public String getMessage();

}

我还没有经常使用枚举和接口。

您不需要在枚举列表声明中传递
moneyType
,也不需要在构造函数中传递它,只需将其忽略即可。原因是每个枚举实例都是
moneyType

interface MoneyType {
    public int getMoney();
    public String getMoneyName();
    public String getMessage();
}

public enum MoneyTypes implements MoneyType {
    DOLLAR(15, "Dollar"), EURO(15, "Dollar"), FRANK(15, "Dollar"), MARK(15, "Dollar"), POUND(15, "Dollar");

    private final int amount;
    private final String moneyName;

    MoneyTypes(int amount, String name) {
        this.amount = amount;
        this.moneyName = name;
    }

    @Override
    public int getMoney() {
        return this.amount;
    }

    @Override
    public String getMoneyName() {
        // moneyName is assigned the value of name
        // You were returning name();
        // Two different values, decide which you want to return.
        return this.moneyName;
    }

    @Override
    public String getMessage() {
        return "got the message";
    }
}
现在您可以执行以下操作:

MoneyType type = MoneyTypes.DOLLAR;
注意,我更改了接口的名称和enum声明,以符合Java命名标准,特别是以大写字母开头。我还将枚举的字段修改为
final
,这样在构建之后就不能分配它们了。

这可能是什么

package Se.lucas.Main;

public enum moneyTypes implements moneyType {

DOLLAR(15, "Dollar"),
 EURO(15, "Dollar"), 
  FRANK(15, "Dollar"),
   MARK(15, "Dollar"),
    POUND(15, "Dollar");

private int amount;
private String moneyName;

moneyTypes(int amount, String moneyName) {
     this.amount = amount;
     this.moneyName= moneyName;

}


@Override
public int getMoney() {
    return this.amount;

}

@Override
public String getMoneyName() {
    return this.moneyName;
}

@Override
public String getMessage() {
    return "got the message";
}
注:

  • 这个
    站错了一边
  • 您在
    getMoneyName()
    中使用了
    this.name()
    ,它将在
    getMoneyName()
    中返回类似于
    DOLLAR的内容,而不是(我认为)
    this.moneyName
  • 我将
    name
    重命名为
    moneyName
    以避免与enum
    name()冲突

  • 最后一点:像这样在枚举上使用接口似乎有点太多了,您真的需要那个接口吗?您可以在没有任何接口的情况下向枚举添加方法。

    顺便说一句,Java类型名称通常以大写字母开头;另外,
    moneyTypes
    应该是单数,因为当您声明变量时,例如
    moneyTypes type=moneyTypes.DOLLAR
    ,其值是单数。如果您在
    DOLLAR(moneyType,15,“DOLLAR”),
    中引用
    moneyType
    ,则不能在其中使用类型名称-这就像试图将
    字符串作为参数传递一样。别提了,你不需要它。