Java对象本身在数组中

时间:2014-12-01 14:32:48

标签: java arrays object

我想要保存"对象"在一个数组内。 我不想保存"新的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的位置我想使用基于类(ObjectString)的泛型类型。 这不适用于Object.classString.class

2 个答案:

答案 0 :(得分:3)

使用

if (x.getClass() == classes[i]) {

而不是instanceof

但请注意,任何使用这些技术的代码从一开始就是可疑的,可能需要重构。为什么要以不知道其类型的方式存储对象?

答案 1 :(得分:1)

您无法在数组中存储“Object”,因为Object不是一个问题。字符串Object是一个类名,对编译器有意义,但是你的程序中没有任何东西可以操作(除了内置的原语)只能处理类的实例,那是对象。另一方面,Object.class是一个对象(类型Class)。

您要找的是java.lang.Class.isInstance。然后使用Class个对象列表。