开发者社区> 问答> 正文

问一个的java的类型转换问题?报错

首先,方法的入参是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;

请问有没有方法可以解决

展开
收起
爱吃鱼的程序员 2020-06-06 09:19:26 490 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB
                        <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">
    

    引用来自“canghailan”的评论

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

     

    2020-06-06 09:19:41
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载