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有什么想法吗?非常感谢--这真让我头疼!
发布于 2011-03-31 00:25:41
是的,不公开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
发布于 2011-03-31 00:12:12
我认为您必须将IntAtom设置为公共的,或者在Atom中提供一个公共函数来验证对象是否为IntAtom。现在还不能比较类定义,因为它是Atom私有的。
发布于 2011-03-31 00:27:10
非常感谢朋友们-看起来Atom类在某个地方有一个叫做isInt()的方法,它可以检查内置的数据类型。如果你们没有回来,我是不会去找它的,所以我真的很感谢你们的帮助!
https://stackoverflow.com/questions/5488963
复制相似问题