为了账号安全,请及时绑定邮箱和手机立即绑定

如何遍历 Object 引用的数组?

如何遍历 Object 引用的数组?

繁华开满天机 2023-06-08 19:19:45
我有一个基于标识字符串get(String)返回 的函数。Object有时,Object返回的get是一个数组。如果是这样,我想遍历每个数组元素并以某种方式处理该元素。类似于下面的代码。 Object object = get(identifier); if(object.getClass().isArray())      processArray(object); void processArray(Object array) {    //For each element in the array, do something }我尝试的解决方案是这样的 void processArray(Object array) {      Object[] arrayCasted  = (Object[]) array;      for(Object arrayElement : arrayCasted)           //Process each element somehow  }但这仅适用于对象数组(而不适用于原始数组) Integer[] test1 = {1, 2, 3}; int[] test2 = {1, 2, 3}; processArray(test1); //Works processArray(test2); //Does not work: ClassCastException有没有办法processArray为所有阵列工作?
查看完整描述

1 回答

?
翻阅古今

TA贡献1780条经验 获得超5个赞

使用java.lang.reflect.Array是关键。如果你有一个Objectwhich 实际上是某种类型的数组(原始类型、字符串或某种自定义类型等),你可以在不知道其类型或进行类型转换等的情况下迭代、打印等。

Object[]无法进行类型转换,因为元素不是类型Object,但您可以通过了解其组件类型 ( obj.getClass().getComponentType()) 来类型转换为特定类型的数组。但是,java.lang.reflect.Array基于解决方案要干净得多。

import java.lang.reflect.Array;


public class ArrayOfUnknownType {

    public static void main(String[] args) {

        int[] i = {1, 2, 3};

        String[] s = {"a", "b", "c"};

        Dog[] d = {new Dog("d"), new Dog("e")};

        process(i);

        process(s);

        process(d);

    }


    private static void process(Object data) {

        System.out.println(data.getClass().getComponentType());

        if(data.getClass().isArray()) {

            int length = Array.getLength(data);

            for(int count =0; count < length; count++ ){

                System.out.println(Array.get(data, count));

            }

        }

    }


    private static class Dog {

        public String name;


        public Dog(String name) {

            this.name = name;

        }


        @Override

        public String toString() {

            return "Dog{" +

                    "name='" + name + '\'' +

                    '}';

        }

    }

}


查看完整回答
反对 回复 2023-06-08
  • 1 回答
  • 0 关注
  • 144 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信