Java 在枚举内使用接口
我正在处理枚举和接口,但是我似乎无法将我实现的“moneyType”接口添加到枚举中,我无法找到解决方案。 基本上:moneyType是红色下划线的,我不知道如何才能正确使用它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, "
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
以避免与enumname()冲突
最后一点:像这样在枚举上使用接口似乎有点太多了,您真的需要那个接口吗?您可以在没有任何接口的情况下向枚举添加方法。顺便说一句,Java类型名称通常以大写字母开头;另外,
moneyTypes
应该是单数,因为当您声明变量时,例如moneyTypes type=moneyTypes.DOLLAR
,其值是单数。如果您在DOLLAR(moneyType,15,“DOLLAR”),
中引用moneyType
,则不能在其中使用类型名称-这就像试图将字符串作为参数传递一样。别提了,你不需要它。