我有一个枚举,但我不知道如何正确使用它?

时间:2016-12-08 06:26:12

标签: java oop enums java-8

我搜索的内容很长,因为枚举很有用。在我的意见中,有许多关键字的变量。所以必须编程一个用于管理银行的程序。我的Enum有2个变量EINZAHLUNG(存款)和AUSZAHLUNG(支付)。

public enum Transaktionsart {
    EINZAHLUNG,AUSZAHLUNG;
}

所以我有一个提供调用方法的Menue类。菜单将由UserInput选择。

public class Menue {
    public void auswahlMenue() {        
        String auswahl;
        do {
            menuePunkte();
            auswahl = MeineEingabe.erfasseAuswahl("Auswahl: ");

            switch (auswahl) {
                case "10":
                    geldEinzahlen();
                break;
                case "11":
                    geldAbheben();
                break;
                case "15":
                    System.out.println("Das Programm wurde Beendet!!");
                break;
            }
        } while (!auswahl.equals("15"));
    }
}

方法geldEinzahlen()将所需金额支付给帐户。 EINZAHLUNG。这会改变ArrayList,但首先我想知道为什么我应该使用枚举。

public void geldEinzahlen(){

    System.out.println("Ihr aktueller Kontostand betreagt: " +    konto.getKontoStand() +"€");
    double betrag = MeineEingabe.erfasseDouble("Wie viel wollen sie Einzahlen? ");
    System.out.println(konto.getKontoStand() + betrag);
}

方法geldAbheben()用于从帐户支付费用。帐户不能低于0欧元。这将改变ArrayList,但首先我想知道为什么我应该使用枚举。

public void geldAbheben(){

    double betrag = MeineEingabe.erfasseDouble("Wie viel wollen Sie abheben? ");

    if(konto.getKontoStand() > betrag){

    }
    else if (konto.getKontoStand() < betrag){
        System.out.println("Leider koennen Sie diesen Betrag nicht auszahlen");
    }
}

我有csv.file,但我认为这不是那么重要。

所以老师想要我使用枚举,但在我的意见中它真的没用。我想问一下Stackoverflow的社区。我可以写什么,例如我使用枚举。

我希望你能为我糟糕的英语提供帮助和抱歉。

最诚挚的问候, 绿茶

2 个答案:

答案 0 :(得分:2)

似乎你错过了枚举的重点。枚举可以包含实现,因此使用枚举可以避免任何编写开关/案例结构的需要。

让我举个例子。请原谅,但我打算在标识符名称中使用英文。

public enum Transaction {
    DEPOSIT {
        @Override public void perform(double amount) {
             // code that puts amount to deposit
        }
    },
    PAYOUT {
        @Override public void perform(double amount) {
             // code that pays specified amount 
        }
    },
    ;
    public abstract void perform(double amount);
}

现在使用此代码非常简单:

......
Transaction.valueOf(transactionName).perform(amount);
.......

transactionNameamount可以是参数。

答案 1 :(得分:0)

@ AlexR的答案的替代实现,使用DoubleConsumers包含每个枚举的Transaction :: perform实现:

public enum Transaction {
  DEPOSIT(amount -> {
    // deposit
  }),
  PAYOUT(amount -> {
    // payout
  });

  private final DoubleConsumer performer;

  public void perform(final double amount) {
    performer.accept(amount);
  }

  private Transaction(final DoubleConsumer performer) {
    this.performer = performer;
  }
}

与@ AlexR的回答完全相同:

.....
Transaction
  .valueOf(transactionName)
  .perform(amount)
;
.....