web-dev-qa-db-ja.com

Arrays.asListを使用してList <>を初期化する

これが機能する理由:

String[] array = {"a", "b", "c"};
List<String> list = Arrays.asList(array);

しかし、これはしません:

List<String> list = Arrays.asList({"a","b","c"});
38
faboolous

これは、配列を作成して割り当てるときにのみ使用できるショートハンドです。

String[] array = {"a", "b", "c"};

ただし、これを行うことができます。

List<String> list = Arrays.asList("a","b","c");

asListは "vararg"引数を取ることができるため。

あなたの質問は、一方が機能し、もう一方が機能しない理由です。

その理由は、{"a","b","c"}は有効なJava expressionではないため、コンパイラは受け入れられません。

あなたがそれを暗示するように思われるのは、 完全な配列作成式 (JLS 15.10)を提供せずに配列初期化子を渡したいということです。

他の人が指摘しているように、正しい配列作成式は次のとおりです。

String[] array = {"a", "b", "c"};

JLS 10.6 Array Initializers で述べられているように、または

String[] array = new String[]{"a", "b", "c"};

JLS 15.10配列作成式 に記載されているとおり。

この2つ目はインライン化に便利なので、配列変数の代わりに直接渡すことができます。

asListArraysメソッドは変数引数を使用し、変数引数式は配列にマッピングされるため、次のようにインライン配列を渡すことができます。

List<String> list = Arrays.asList(new String[]{"a", "b", "c"});

または、配列に自動的にマップされる変数引数を渡すだけです:

List<String> list = Arrays.asList("a","b","c");
13
Edwin Dalorzo

あなたが試すことができます

List<String> list = Arrays.asList(new String[] {"a","b","c"});
10
user219882