21

次の例を見てください。

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し、その配列に設定することです。

4

3 に答える 3

24

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

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

于 2011-11-28T20:57:12.633 に答える
23

試してみてくださいlist = new int[]{4, 5, 6, 7, 8};

于 2011-11-28T20:57:14.490 に答える
1

ここを使用することに加え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を試してください。(Java 8にはまだハッシュマップを設定するための省略形がなく、開発者の生産性を向上させるために小さな変更を加えるのに非常に長い時間がかかりました

于 2016-08-15T05:40:45.797 に答える