数组中的Java对象本身

数组中的Java对象本身,java,arrays,object,Java,Arrays,Object,我想在数组中保存“Object”。 我不想在数组中保存“newobject()” 为什么?? 我有3个大的If语句,其中我检查一个实例是否是某个类的instanceof,例如 if (x instanceof String) { SomeMethod(x, String); } 我的计划是: Class<?>[] classes = {Object, String, SomeOtherClass}; for (int i = 0; i < 3; i++) { i

我想在数组中保存“Object”。 我不想在数组中保存“newobject()”

为什么?? 我有3个大的If语句,其中我检查一个实例是否是某个类的instanceof,例如

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,String,SomeOtherClass};
对于(int i=0;i<3;i++){
if(类[i]的x实例){
somethod(x,class[i]);
}
}
然而,这是可行的

Class<?>[] classes = {Object.class, String.class, SomeOtherClass.class};
Class[]classes={Object.Class,String.Class,SomeOtherClass.Class};
但是我不能再使用instanceof了

有什么建议吗

附言:在搜索时,我只找到了如何在数组中保存类的实例,而不是类本身

编辑: 在SomeMethod的位置,我想使用基于类的泛型类型(
对象
字符串
)。
这不适用于
对象.class
字符串.class

您不能将“
对象
”存储在数组中,因为
对象
不是一个对象。字符串
对象
是一个类名,对编译器来说很有意义,但是在程序中,除了内置原语之外,您不能对任何只能处理类实例(即对象)的对象进行操作<代码>对象。另一方面,类是一个对象(类型为
class


你要找的是。然后使用
对象列表。

不能在数组中存储“
对象
”,因为
对象
不是一个对象。字符串
对象
是一个类名,对编译器来说很有意义,但是在程序中,除了内置原语之外,您不能对任何只能处理类实例(即对象)的对象进行操作<代码>对象。另一方面,类是一个对象(类型为
class

你要找的是。然后使用
对象列表。

使用

if (x.getClass() == classes[i]) {
而不是此的
instanceof

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

使用

if (x.getClass() == classes[i]) {
而不是此的
instanceof


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

如果涉及多态性,这将无法像
instanceof
操作符那样工作。例如,
Class cls=Numer.Class;Object obj=新整数(0);System.out.println(cls==obj.getClass())
将打印
false
,尽管
obj instanceof Number
。感谢您的帮助,但我必须在if语句中创建一个泛型类,并且可以执行类似
new ArrayList
的操作,但
ArrayList
ArrayList
的操作work@mac.1是的,恐怕这完全不可能,由于类型擦除:泛型在编译阶段丢失所有类型参数。这是认为您需要重新编写代码的另一个原因。如果涉及多态性,这将无法像
instanceof
操作符那样工作。例如,
Class cls=Numer.Class;Object obj=新整数(0);System.out.println(cls==obj.getClass())
将打印
false
,尽管
obj instanceof Number
。感谢您的帮助,但我必须在if语句中创建一个泛型类,并且可以执行类似
new ArrayList
的操作,但
ArrayList
ArrayList
的操作work@mac.1是的,恐怕这完全不可能,由于类型擦除:泛型在编译阶段丢失所有类型参数。这是认为需要重新编写代码的另一个原因。