2011-03-30 168 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

相关问题