首先,方法的入参是Object value,把任意输入的数组value转换为Object[]
方法内的处理为
if (value instanceof Collection) {
Collection<Object> valTmp = ((Collection<Object>) value);
value = valTmp.toArray(new Object[valTmp.size()]);
} else {
value = ((Object[]) value);
}
首先前提是输入参数一定是一维数组类型了,大部分的数组输入都能转换为Object[]。
但是,如果传入的是基本类型数组,如int[] 或者long[]的话,会报错[I cannot be cast to [Ljava.lang.Object;
请问有没有方法可以解决
<p>java.lang.reflect.Array工具类</p>
@Test
public void testArray() {
System.out.println(Arrays.toString(toArray(new String[]{"a", "b"})));
System.out.println(Arrays.toString(toArray(new int[]{1, 2})));
System.out.println(Arrays.toString(toArray(Arrays.asList(3L, 4L))));
}
public static Object[] toArray(Object object) {
if (object == null) {
return null;
}
if (object instanceof Object[]) {
return (Object[]) object;
}
if (object.getClass().isArray()) {
Object[] array = new Object[Array.getLength(object)];
for (int i = 0; i < array.length; i++) {
array[i] = Array.get(object, i);
}
return array;
}
if (object instanceof Collection) {
Collection<?> collection = (Collection<?>) object;
return collection.toArray();
}
if (object instanceof Iterable) {
Iterable<?> iterable = (Iterable<?>) object;
return StreamSupport.stream(Spliterators.spliteratorUnknownSize(iterable.iterator(), 0), false)
.toArray();
}
throw new IllegalArgumentException();
}
<p>用包装类 例如int[] 包装成Integer[]</p>
<div class="ref">
用包装类 例如int[] 包装成Integer[]
你输入这种可以啊 在我调用这种方法前包装一下也可以啊 不一定非得直接用Integer[]
<p>有办法。例如,将一个整型数组转换为一个 Integer 类型的数组。</p>
Object[] transfer(int [] a){
Object [] obj = new Object[a.length];
for (int i=0;i<obj.length;i++)
obj[i] = new Integer(a[i]);
return obj;
}
<div class="ref">
java.lang.reflect.Array工具类
@Test
public void testArray() {
System.out.println(Arrays.toString(toArray(new String[]{"a", "b"})));
System.out.println(Arrays.toString(toArray(new int[]{1, 2})));
System.out.println(Arrays.toString(toArray(Arrays.asList(3L, 4L))));
}
public static Object[] toArray(Object object) {
if (object == null) {
return null;
}
if (object instanceof Object[]) {
return (Object[]) object;
}
if (object.getClass().isArray()) {
Object[] array = new Object[Array.getLength(object)];
for (int i = 0; i < array.length; i++) {
array[i] = Array.get(object, i);
}
return array;
}
if (object instanceof Collection) {
Collection<?> collection = (Collection<?>) object;
return collection.toArray();
}
if (object instanceof Iterable) {
Iterable<?> iterable = (Iterable<?>) object;
return StreamSupport.stream(Spliterators.spliteratorUnknownSize(iterable.iterator(), 0), false)
.toArray();
}
throw new IllegalArgumentException();
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。