gpt4 book ai didi

java - 将 T 和 T[] 的混合传递给 Java 可变参数方法

转载 作者:行者123 更新时间:2023-12-04 06:53:12 26 4
gpt4 key购买 nike

假设你有一个 Java 方法

void foobar(int id, String ... args)

并希望将字符串数组和字符串都传递到方法中。像这样
String arr1[]={"adas", "adasda"};
String arr2[]={"adas", "adasda"};
foobar(0, "adsa", "asdas");
foobar(1, arr1);
foobar(2, arr1, arr2);
foobar(3, arr1, "asdas", arr2);

在 Python 中,有“*”。有没有比这种相当丑陋的辅助方法更好的方法:
static String[] concat(Object... args) {
List<String> result = new ArrayList<String>();
for (Object arg : args) {
if (arg instanceof String) {
String s = (String) arg;
result.add(s);
} else if (arg.getClass().isArray() && arg.getClass().getComponentType().equals(String.class)) {
String arr[] = (String[]) arg;
for (String s : arr) {
result.add(s);
}
} else {
throw new RuntimeException();
}
}
return result.toArray(new String[result.size()]);
}

这使得
foobar(4, concat(arr1, "asdas", arr2));

最佳答案

Java 没有为此内置任何语法糖,但您的辅助方法可能会更好:

private static String[] concat(Object... stringOrArrays) {
List<String> result = new ArrayList<String>();
for (Object stringOrArray : stringOrArrays) {
if (stringOrArray instanceof String) {
result.add((String) stringOrArray);
} else if (stringOrArray instanceof String[]) {
Collections.addAll(result, (String[]) stringOrArray);
} else if (stringOrArray == null) {
results.add(null)
} else {
throw new RuntimeException(stringOrArray + " not a String or String[]");
}
}
return result.toArray(new String[0]);
}

我可以想出一个单衬(以避免该方法),但我不推荐它:
    foobar(1, new ArrayList<String>() {{
addAll(Arrays.asList(arr1));
addAll(Arrays.asList(arr2));
add(arr3);
}}.toArray(new String[0]));

one-liner 的唯一优势是类型安全。

关于java - 将 T 和 T[] 的混合传递给 Java 可变参数方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2829807/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com