2012-06-14 45 views
1

我正在處理一個項目,其中需要將大量對象添加到ArrayList中,然後在其中調用特定的函數。我有這個部分,但在我的程序中,我需要訪問ArrayList中的特定實例,只使用我正在尋找的類的參數。 例如:從ArrayList中獲取特定的類

public class Manager { 
    public static ArrayList<O> loadedHacks = new ArrayList<O>(); 
    public void initOs(){ 
     loadedHacks.add(new O()); 
    } 
} 

public class O { 
    public boolean enabled = false; 
    public void onEnable(){} 
} 

public class A extends O{ 
} 

再後來我想做的事情是這樣的:

if(Helper.get(A.class).enabled){} 
+0

我提供了一個問題的答案,我想*你問,但你應該理想的嘗試和澄清你如何提問!例如,你提到了ArrayList,但是沒有提到你的示例代碼中的任何ArrayList應該暴露你正試圖解決的問題...... –

回答

2

它不是從你的問題十分清楚實際的問題是什麼,你正在試圖解決,但如果我理解正確,你要做的就是說:「對象X可以是類A的一些子類。如果它是子類B,那麼我想調用B.method(),它沒有定義一個」。

其中,情況下,你可以做這樣的事情:

if (object instanceof SpecificSubclass) { 
    SpecificSubclass specificObject = (SpecificSubclass) object; 
    specificObject.specificMethod(); 
} 

編輯:從您的評論,看來你正在尋找的功能略有不同。如果您有一個Class作爲參數,那麼要查看某個特定對象是否是該類的一個實例,請使用Class.isAssignableFrom()方法。

+0

基本上我的問題是我會在getHack方法中做什麼?我如何掃描一個ArrayList只有我給它的參數? – Chris

+0

好的,您希望getHack()方法實際執行什麼樣的英語語言? –

+0

我編輯了代碼使其更清晰一些。 getHack()應該能夠接收一個類作爲它的參數,然後查看ArrayList loadedHacks來找到相同的類並返回它。 – Chris

1

如果我理解正確,您將不得不迭代ArrayList,並將您作爲Class對象具有的參數與數組中的getClass()的返回類型進行比較,以獲取對象並將其返回。由於getClass()方法返回對象的Class類型,而不是引用。

+0

公共哈克getHack(類hackClass){ \t \t爲(哈克H:loadedHacks){ \t \t \t如果{ \t \t \t \t返回小時;(hackClass.getClass()等於(h.getClass())。) \t \t \t} \t \t} \t \t返回NULL; \t} – Chris

+0

這將是沿線的,是正確的? – Chris

+0

等於會比較對象引用,所以我不確定它會以這種方式工作。但是你可以比較兩者的toString()和equals,如果兩者都是一個Class類型的實例,他們必須返回相同的String。但不要使用已經Class類型參數的getClass(),你應該像這樣比較'ha.Class.toString()== h.getClass()。toString()' –