cmdを引数に基づいて静的最終変数を初期化するには?

ボブ :

授業概要では、静的最終変数にオプションのcmd引数を割り当てるために私を必要とします。

私がメインでそれをやって試してみました()が、コンパイラは「最終変数に値を代入することはできません」文句を言います。私は(メイン)が、同じエラーによって呼び出された静的メソッドでそれをやってみました。私は他の回答に使用されている静的ブロックについて聞いたが、私は私が割り当てることを決めるとき、CMD引数に到達できるようにする必要があります。1が提供されない限り、両方の引数がデフォルト値を持たなければならないと私はまた、引数解析の上にいくつかの頭痛を持っています。どれボーナスアドバイスは大歓迎です。

public class FibonacciNim {
    private static Scanner myScanner = new Scanner(System.in);
    private static final int NO_OF_HEAPS;
    private static final int TOKENS_PER_HEAP;

    public static void main(String[] args) {
        // set heaps and tokens using args
        if (args.length == 0) {
            NO_OF_HEAPS = 3;
            TOKENS_PER_HEAP = 9;
        } else {
            boolean usageCorrect = false;
            for (int i = 0; i < args.length-1; i++) {
                if (args[i].equals("-heaps")) {
                    try {
                        NO_OF_HEAPS = Integer.parseInt(args[i+1]));
                        usageCorrect = true;
                    } catch (NumberFormatException e) {
                        usageCorrect = false;
                    }
                } else if (args[i].equals("-tokens")) {
                    try {
                        TOKENS_PER_HEAP = Integer.parseInt(args[i+1]);
                        usageCorrect = true;
                    } catch (NumberFormatException e) {
                        usageCorrect = false;
                    }
                }
            }
        }

        ...

    }

    ...

}

読んでくれてありがとう!

ルイ・ワッサーマン:

あなたは、静的最終変数にコマンドラインから...実際には、実際に割り当て何かすることはできません。(あなたは非常に汚いハックによってすることができるかもしれませんが、これはおそらく割り当ての意図ではありません。)

どのようなことができるかもしれないと、あなたが最終的に変更可能な静的を作成し、その内容に割り当てることになっているということです。それはひどい練習だとあなたは本当に現実の生活の中でそれを行うべきではありませんが、それは少なくとももっともらしいであります。たとえば、あなたが書くかもしれません

static final String[] argHolder = new String[1];
public static void main(String[] args) {
  ...
  argsHolder[0] = args[0];
  ...
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=329841&siteId=1