2016-04-22 12 views
2

Ich bin mit Enumerationen und Schnittstellen rum, aber ich kann nicht scheinen, die "MoneyType" -Schnittstelle, die ich in die enum implementiert hatte, ich konnte nicht die Lösung finden. Grundsätzlich: der moneyType ist rot unterstrichen, und ich kann nicht herausfinden, wie ich es richtig machen kann!Verwendung einer Schnittstelle innerhalb einer enum

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(); 

} 

Ich habe noch nicht viel mit Aufzählung und Schnittstellen gearbeitet.

+2

Übrigens beginnen Java Typnamen üblicherweise mit einem Großbuchstaben; Außerdem sollten 'moneyTypes' singulär sein, da, wenn Sie eine Variable deklarieren, z. 'moneyTypes type = moneyTypes.DOLLAR;', sein Wert ist singulär. –

+0

Wenn Sie sich auf 'moneyType' in' DOLLAR (moneyType, 15, "Dollar"), 'beziehen, können Sie dort keinen Typnamen verwenden - das ist, als würde man' String' als Parameter übergeben. Lass es einfach aus: Du brauchst es nicht. –

Antwort

2

Sie müssen nicht moneyType in der Enum-Liste-Deklaration übergeben, oder haben Sie es im Konstruktor, lassen Sie es einfach. Der Grund dafür ist, dass jede Enum-Instanz eine moneyType ist.

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"; 
    } 
} 

Jetzt können Sie tun:

MoneyType type = MoneyTypes.DOLLAR; 

Bitte beachte, dass ich die Namen der Schnittstelle und die Enum-Deklaration zu Java Namensstandards speziell anzupassen geändert, mit einem Großbuchstaben beginnen. Ich habe auch die Felder der Enum zu final geändert, so dass sie nicht zugewiesen werden können, nachdem sie erstellt werden.

1

Das vielleicht?

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"; 
} 

Hinweis:

  1. Sie this waren auf der falschen Seite
  2. Sie this.name() verwendet, die so etwas wie DOLLAR in getMoneyName() zurückkehren würde statt (ich glaube) this.moneyName
  3. I umbenannt name zu moneyName kein Konflikt mit Enum haben name()

Endgültiger Punkt: die Verwendung einer Schnittstelle über eine Enum wie diese scheint ein bisschen zu viel, brauchen Sie wirklich diese Schnittstelle? Sie können eine Methode zu einer Enumeration ohne Schnittstelle hinzufügen.

Verwandte Themen