Java中是否有任何varargs数组构造方法?

时间:2011-11-15 09:39:19

标签: java arrays verbosity

非常有用的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.util.Arrays之外的Java语言中是否存在其他任何方法?

4 个答案:

答案 0 :(得分:3)

您可以从ArrayUtils看到Apache Commons。您必须使用lib 3.0或更高版本。

示例:

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

答案 1 :(得分:1)

在我看来,Java中确实没有array()方法。如果你想要更简洁,就像你说的那样你可以使用文字。或者在方法参数中,您可以使用varargs(根本不需要数组)。根据您的标题,这是您想要做的。你可以这样做:

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

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

只有当方法签名实际上有一个数组时,你才需要指定new String[],这在我看来并不是太多额外的写作。

编辑:您似乎想要使用数组作为参数调用方法的详细方法。我不会只添加一行方法的外部库。这可以用于例如:

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

yourMethod(toArr("1", "2", "3"));

答案 2 :(得分:1)

来自Apache Commons Lang(v3.0或更高版本)的ArrayUtils:

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

...或者只是从Apache获取代码并实现“自己”:

public static <T> T[] toArray(final T... items) {
    return items;
}

答案 3 :(得分:1)

如果你想要比

更短的东西
x(new String[] {"1", "1", "2", "3", "5", "8"});

我使用下面比列表本身更短的内容。

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

它不使用任何其他库。


假设你想要密钥和值,你仍然可以使用varargs

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;
}