Java:使用 int 数组调用 Object vararg 方法

标签 java arrays variadic-functions

有一个具有以下签名的方法:

public static String concatAndSeperate(Object seperator, Object... obj)

该方法的目的是用 obj 的条目之间的分隔符连接 obj 中的对象。

现在我有一个 int 数组,由于严重的副作用,我无法修改它。

int[] numbers = new int[] {1, 2, 3, 4, 5, 6, 7};

我想将这些数字用于 SQL IN 语句:

SELECT * FROM quux WHERE id IN (1, 2, 3, 4, 5, 6, 7);

所以我尝试用我漂亮的小方法连接它:

concatAndSeperate(", ", numbers);

当然,这是行不通的,因为 numbers 是一个整数数组,而不是一个整数数组。所以我尝试用它制作一个整数数组:

concatAndSeperate(", ", Arrays.asList(numbers).toArray(new Integer[numbers.length]);

这会导致一个我不明白的错误:

Exception in thread "main" java.lang.ArrayStoreException
at java.lang.System.arraycopy(Native Method)
at java.util.Arrays.copyOf(Unknown Source)
at java.util.Arrays$ArrayList.toArray(Unknown Source)
at mystuff.MyClass.main(MyClass.java:415)

最佳答案

您可以使用 commons-lang 为您完成将原语转换为包装器数组的工作(参见 ArrayUtils.toObject(int[]):

concatAndSeparate(", ", ArrayUtils.toObject(numbers));

但是,是否有理由不将数字存储为

Integer numbers = new Integer[] { 1, 2, 3, 4, 5, 6 };

关于Java:使用 int 数组调用 Object vararg 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17522334/

相关文章:

java - JAVA 中的 SVM、KNN 和 Naive Byes 等文本分类器的库?

java - if else 语句出现意外结果

java - 如何确定最后一次通话是在android中拨出还是拨入

Javascript仅显示每个数组元素的第一个字母一次

java - 删除JAVA中文件传递的停用词

c++ - Qt 和可变参数函数

java - 我正在尝试在 java 中打印一个数组,我需要使用 public void intArray() 作为方法

functional-programming - 或作为方案中的程序

c++ - 在可变参数模板中包含相同类型的数组