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类中元素的类型。

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


有任何想法吗??
非常感谢-这真的是我的头脑!!

最佳答案

是的,尽管IntAtom有点古怪,但有可能不公开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

09-08 10:06