簡體   English   中英

有沒有辦法遍歷二維ArrayList並調用對象的類方法?

[英]Is there a way to iterate through a two dimensional ArrayList and also invoke the class methods of the objects?

因此,我嘗試遍歷Java中的二維ArrayList。 現在,我將迭代部分簡化了,但是,我似乎無法從對象類中調用方法。

我已經檢查了拼寫,以確保正確拼寫了類方法。 它是。 我還嘗試了以一種遍歷2D Array(嵌套循環)的相同方式遍歷2D ArrayList,同時顯然使用ArrayList方法(.get()、. add()等)來選擇我需要的2D Arraylist中的特定對象。

    for(int i = 0; i < layers.size(); i++)
    {

        for(int j = 0; j < layers.get(i).size(); j++)
        {
            layers.get(i).get(j).calculate(); 
            layers.get(i).get(j).activate();
            input3.add(layers.get(i).get(j).getOutput());
        }  


    }

預期的結果是,循環將為ArrayList中的每個對象使用被調用的類對象進行對象預計算。 但是,它一直在說找不到我要調用的方法,這些方法據我所知。 我不確定如何解決此問題,只能希望其他人遇到此問題並想出解決方法。 先感謝您。

編輯/更新

應當指出,由於這是一個錯誤,BlueJ不允許我對其進行編譯。

現在了解“ 2D ArrayList”的含義,這是我的編碼方式:

enter code here
//First lets say we have a few different ArrayLists
ArrayList<Object> list1 = new ArrayList<Object>();
ArrayList<Object> list2 = new ArrayList<Object>();
ArrayList<Object> list3 = new ArrayList<Object>();
//Now lets say you want to iterate through all of these with only a few 
//lines of code... Put them into another ArrayList
ArrayList<ArrayList> bigList = new ArrayList<ArrayList>();

這就是2D ArrayList的意思。 另一個ArrayList中的一組ArrayList。

同樣,.Calculate()和.Activate()方法從我所呈現的代碼片段中未顯示的對象實例化中獲取輸入。

有沒有一種方法可以遍歷...並調用對象的類方法?

是的,當然有。

無論對象存儲在數據結構中如何,都可以調用其方法。 您面臨的問題有兩個方面:

首先,將list1list2list3 ,...聲明為ArrayList<Object> 這意味着,無論您放入列表中的什么內容,在檢索編譯器時都只會知道它是某種Object 因此,它僅允許您在這些元素上從Object調用方法。 這可以通過顯式強制轉換解決,例如

MyClass element = (MyClass)(layers.get(i).get(j));
element.calculate();

但是,更好的選擇是首先使用正確的泛型類型。 請注意, ArrayList<ArrayList>使用“原始”類型ArrayList作為通用類型參數,這可能不是您想要的。

因此,假設您存儲的元素都是同一類型(例如MyClass ),那么干凈的解決方案將是這樣的:

ArrayList<MyClass> list1 = ...;

ArrayList<ArrayList<MyClass>> bigList = ...;

現在,編譯器將知道在bigListArrayList<MyClass>對象,從中,它也知道在bigList的元素內有MyClass對象。 因此,它將為您自動執行必要的強制類型轉換,您可以編寫bigList.get(i).get(j).methodOfMyClass(...)

如果您存儲在內部列表中的元素不具有公共(超級)類型,即它們唯一的隱式公共超級類型是Object ,那么您將沒有選擇,只能手動執行相應的instanceof檢查和強制轉換。

順便說一下,由於ArrayList (間接地)實現了Iterable接口,因此您只需編寫

for ( ArrayList<MyClass> innerList : bigList ) {
  for ( MyClass element : innerList ) {
    element.methodOfMyClass(...);
  }
}

遍歷bigList中包含的所有列表的所有元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM