2011-03-30 164 views
1
Object ele=a.get(i); 
if(ele instanceof java.lang.Integer){//cast to integer: 
    print("found Int"); 
}else{ //cast to string: 
    print("found: "+ele.getClass()); 
} 
//prints: found: class com.cycling74.max.Atom$IntAtom 

這是更大塊代碼的一部分,但這是相關部分。我需要知道如何通過cycling74檢查Atom類中元素的類型。如何檢查自定義集合中元素的java數據類型?

if(ele instanceof com.cycling74.max.Atom$IntAtom) 
//ERROR: com.cycling74.max.Atom.IntAtom has private access in com.cycling74.max.Atom 

任何想法?? 非常感謝 - 這真的是我的頭!

+0

如果該類聲明爲private,則不能在com.cycling74.max.Atom類之外執行'instanceof'。 – 2011-03-30 16:14:20

回答

3

是的,有可能不公開IntAtom雖然有點hacky。

首先,你需要去的私有內部IntAtom類的引用:

public class SomeClass { 
    public static final Class<?> INT_ATOM_CLASS; 
    static { 
    Class<?> [] innerClasses = Atom.class.getDeclaredClasses(); 
    Class<?> intAtomClass = null; 
    for (Class<?> klass : innerClasses) { 
     if (klass.getSimpleName().equals("IntAtom")) { 
     intAtomClass = klass; 
     break; 
     } 
    } 
    INT_ATOM_CLASS = intAtomClass; 
    } 
} 

然後做instanceof檢查:

if (SomeClass.INT_ATOM_CLASS.isAssignableFrom(ele.getClass())) { 
    // do stuff 
} 

Javadoc文檔Class.isAssignableFrom(Class c);

+0

生病了。 +1。 – 2011-03-30 17:15:23

1

我想你必須要麼公開IntAtom,要麼在Atom中提供一個公共函數來驗證對象是否是IntAtom。目前無法對類定義進行比較,因爲它對Atom是私有的。

+0

嗯,謝謝@roberttdev聽起來很複雜。我沒有訪問Atom類tho。它是MaxMSP軟件內置的API。另外,如果我有訪問權限,我不知道從哪裏開始,因爲我是全新的Java! (這是我的第一個項目!)。有沒有什麼hacky的解決方法,我可能會嘗試? – cronoklee 2011-03-30 16:16:48

+0

我唯一能想到的就是將Atom子類化並自己做出改變。這不是很漂亮......但我不知道你還能如何訪問這個私人課程。仔細檢查API以確保它們不首先提供這些信息。 – roberttdev 2011-03-30 16:20:00

+0

您的子類解決方案將無法幫助,因爲私有類不會被子類繼承。 – 2011-03-30 16:22:04

0

非常感謝小夥子們 - 看起來Atom類有一個名爲isInt()的方法,它可以檢查內置的數據類型。我不會找到它,如果你們沒有回來,所以我非常感謝幫助!

+0

這應該是一個評論,即不要發表評論回答部分。 – 2011-03-30 17:21:58

相關問題