亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何遍歷 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 關注
  • 175 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號