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

这是一大段代码的一部分,但这是相关部分。我需要知道如何通过Cycle74检查 Atom 类中元素的类型。

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

有任何想法吗??非常感谢 - 这真的让我很头疼!

4

3 回答 3

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
}

Class.isAssignableFrom(Class c)的 Javadoc ;

于 2011-03-30T16:25:41.103 回答
1

我认为您必须将 IntAtom 公开,或者在 Atom 中提供一个可以验证对象是否为 IntAtom 的公共函数。现在无法比较类定义,因为它是 Atom 私有的。

于 2011-03-30T16:12:12.023 回答
0

非常感谢伙计们 - 似乎 Atom 类在某处有一个名为 isInt() 的方法,可以检查内置数据类型。如果你们没有回来,我不会去找它,所以我真的很感谢你的帮助!

于 2011-03-30T16:27:10.323 回答