Javaコンストラクターのフィールドの速記アレイ初期化を使用できないのはなぜですか?

StackOverflow https://stackoverflow.com/questions/8302179

質問

次の例を挙げてください。

private int[] list;

public Listing() {
    // Why can't I do this?
    list = {4, 5, 6, 7, 8};

    // I have to do this:
    int[] contents = {4, 5, 6, 7, 8};
    list = contents;
}

速記の初期化を使用できないのはなぜですか?これを回避することを考えることができる唯一の方法は、別の配列と設定を作成することです list その配列に。

役に立ちましたか?

解決

定義行で配列を定義すると、タイプが何であるかを知っていると仮定します new int[] 冗長です。ただし、割り当てを使用する場合、配列のタイプがわかっているとは想定していないため、指定します。

確かに他の言語はこれに問題はありませんが、Javaでは、同じ行でフィールド/変数を定義および初期化しているかどうかが違いです。

他のヒント

試す list = new int[]{4, 5, 6, 7, 8};.

使用に加えて new Object[]{blah, blah....} ここにあなたが望むことをするための少し短いアプローチがあります。以下の方法を使用してください。

public static Object [] args(Object... vararg) {
    Object[] array = new Object[vararg.length];
    for (int i = 0; i < vararg.length; i++) {
        array[i] = vararg[i];
    }
    return array;
}

PS -Javaは良いですが、このような状況で吸います。可能であれば、RubyまたはPythonをプロジェクトに試してみてください。正当化できます。 (見て Java8はまだハッシュマップを埋めるための速記を持っていません, 、 と 開発者の生産性を向上させるために小さな変更を加えるのにそれほど時間がかかりました)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top