1

アクションで許可されているタスクを検索する Java の以下のサンプル コードを検討してください。

public boolean acceptableTaskForAction(String taskName,String actionName) {


    String[] allowedActions;
    switch (taskName){
    case "Payment" :
        allowedActions = { "full-payment", "bill-payment"};

    case "Transfer" :
        allowedActions = { "transfer-to-other", "tarnsfer-to-own"};

    }

    for (String action : allowedActions){
        if (actionName.equals(action)){
            return true;
            }
    }
    return false;
}

ご存知のように、上記は次のようにコンパイルされませんArray constants can only be used in initializers

さまざまなパラメーターを定義することを考えたので、

public boolean acceptableTaskForAction(String taskName,String actionName) {


    String[] allowedActionsForPayment= { "full-payment", "payment"};
    String[] allowedActionsForTransfer= { "transfer-to-other", "tarnsfer-to-own"};
    String[] allowedActions={};
    switch (taskName){
    case "Payment" :
        allowedActions = allowedActionsForPayment;

    case "Transfer" :
        allowedActions = allowedActionsForTransfer;

    }

    for (String action : allowedActions){
        if (actionName.equals(action)){
            return true;
            }
    }
    return false;
}

他の解決策を考えますか!? 最善の解決策は何だと思いますか?

4

2 に答える 2

4

あなたの場合、このようなことをすることができます

String[] allowedActions;
switch (taskName){
case "Payment" :
    allowedActions = new String[] { "full-payment", "bill-payment"};
    break;
case "Transfer" :
    allowedActions = new String[] { "transfer-to-other", "tarnsfer-to-own"};
    break;
}

配列定数は初期化子でのみ使用できますが、必要に応じていつでも新しいものを作成してString[]割り当てることができます。

于 2013-11-11T06:06:58.130 に答える
1

代わりに、要件に安全にArray使用できます。ArrayList

List<String> allowedActions = new ArrayList<String>();
switch (taskName){
    case "Payment" :
        allowedActions.add("full-payment");
        allowedActions.add("payment");
        break;
    case "Transfer" :
        allowedActions.add("transfer-to-other");
        allowedActions.add("tarnsfer-to-own");
        break;
    }
return allowedActions.contains(actionName);
于 2013-11-11T06:07:20.707 に答える