4

非常に便利なものがありますArrays.asList()

public static <T> List<T> asList(T... a) {
    return new ArrayList<T>(a);
}

しかし、ありませんArrays.array()

public static <T> T[] array(T... values) {
    return values;
}

非常に些細なことですが、これは配列を構築するための非常に便利な方法です。

String[] strings1 = array("1", "1", "2", "3", "5", "8");

// as opposed to the slightly more verbose
String[] strings2 = new String[] { "1", "1", "2", "3", "5", "8" };

// Of course, you can assign array literals like this
String[] strings3 = { "1", "1", "2", "3", "5", "8" };

// But you can't pass array literals to methods:
void x(String[] args);

// doesn't work
x({ "1", "1", "2", "3", "5", "8" });

// this would
x(array("1", "1", "2", "3", "5", "8"));

以外の Java 言語のどこかにそのようなメソッドはありjava.util.Arraysますか?

4

4 に答える 4

3
于 2011-11-15T09:45:33.060 に答える
1

array()私の意見では、Javaのメソッドは本当に必要ありません。あなたが言ったように冗長性を減らしたい場合は、リテラルを使用できます。または、メソッドパラメータでvarargsを使用できます(配列はまったく必要ありません)。あなたのタイトルに基づいて、これはあなたがしたいことです。あなたはこれを行うことができます:

public static void doThings(String... values) {
    System.out.println(values[0]);
}

doThings("This", "needs", "no", "array");

メソッドシグネチャに実際に配列がある場合にのみ、を指定する必要がありますnew String[]。これは、私の意見ではあまり余分な記述ではありません。

編集:パラメータとして配列を使用してメソッドを呼び出すためのより冗長な方法が必要なようです。1行のメソッドだけで外部ライブラリを追加することはしません。これは、たとえば次のように機能します。

public static <T> T[] toArr(T... values) {
    return values;
}

yourMethod(toArr("1", "2", "3"));
于 2011-11-15T09:56:32.087 に答える
1

Apache Commons Lang(v3.0以降)のArrayUtils:

String[] array = ArrayUtils.toArray("1", "2");
String[] emptyArray = ArrayUtils.<String>toArray();

...または、Apacheからコードを取得して、「yourself」を実装します。

public static <T> T[] toArray(final T... items) {
    return items;
}
于 2011-11-15T10:03:36.353 に答える
1

それよりも短いものが必要な場合

x(new String[] {"1", "1", "2", "3", "5", "8"});

リスト自体よりも短い以下を使用します。

   x("1,1,2,3,5,8".split(","));
// {"1", "1", "2", "3", "5", "8"}

追加のライブラリは使用しません。


引き続き可変引数を使用できるキーと値が必要だとします

public static <K,V> Map<K, V> asMap(K k, V v, Object ... keysAndValues) {
    Map<K,V> map = new LinkedHashMap<K, V>();
    map.put(k, v);
    for(int i=0;i<keysAndValues.length;i+=2)
        map.put((K) keysAndValues[i], (V) keysAndValues[i+1]);
    return map;
}
于 2011-11-15T10:19:21.670 に答える