我想要保存"对象"在一个数组内。 我不想保存"新的Object()"在一个数组内。
为什么呢? 我有3个大的If语句,我检查Instance是否是SomeClass的实例,例如
if (x instanceof String) {
SomeMethod(x, String);
}
我计划像:
Class<?>[] classes = {Object, String, SomeOtherClass};
for (int i = 0; i < 3; i++) {
if (x instanceof classes [i]) {
SomeMethod(x, classes [i]);
}
}
然而这是有效的
Class<?>[] classes = {Object.class, String.class, SomeOtherClass.class};
但是我不能再使用instanceof了。
任何建议?
P.S:在搜索时我只发现了如何在数组中保存类的实例,而不是类本身......
编辑:
在SomeMethod的位置我想使用基于类(Object
,String
)的泛型类型。
这不适用于Object.class
,String.class
。
答案 0 :(得分:3)
使用
if (x.getClass() == classes[i]) {
而不是instanceof
。
但请注意,任何使用这些技术的代码从一开始就是可疑的,可能需要重构。为什么要以不知道其类型的方式存储对象?
答案 1 :(得分:1)
您无法在数组中存储“Object
”,因为Object
不是一个问题。字符串Object
是一个类名,对编译器有意义,但是你的程序中没有任何东西可以操作(除了内置的原语)只能处理类的实例,那是对象。另一方面,Object.class
是一个对象(类型Class
)。
您要找的是java.lang.Class.isInstance
。然后使用Class
个对象列表。