如何在Object []数组中检查给定对象是否是某个类的实例?

如何在Object []数组中检查给定对象是否是某个类的实例?

问题描述:

我试图找出如何确定哪些类时,它在对象[]数组给定对象实例化。例如:如何在Object []数组中检查给定对象是否是某个类的实例?

Object[] array = new Object[]{175, "sss", new Table(), true}; 
Object obj = array[0]; // hmm... can this be used as an integer or maybe as a string? 

这有可能吗?

+0

你为什么要储存在'Object'阵列的一切吗? – 2012-02-26 18:38:35

+0

我使用Object数组来存储调用Lua函数的参数。 – wassup 2012-02-26 18:39:58

您可以拨打getClass()找出类特定对象,或者您可以使用instanceof来检查规范IFIC类型:

if (array[0] instanceof Integer) { 
} 

通常不必做了很多这表明你的设计弱点,但 - 你应该尝试需要避免这样做。

+1

具体可能没有整数,但诠释 – 2012-02-26 18:39:59

+3

他有对象的数组,所以你一定没有INT – UmNyobe 2012-02-26 18:45:23

+1

@MichalBorek'instanceof'只对工作对象和'int'是不是一个对象。如果你将'int'赋值给'Object',它将被自动转换为'Integer'。 – 2012-02-26 18:48:45

您可以测试它是否是一个预先知道类的一个实例(和投它)是这样的:

if (obj instanceof String) { 
    String s = (String) obj; //casts the obj now you know it's a String 
} 

我喜欢把这个还不如做对象,但就像任何变化揭示其真实性格。例如,有点像看到一个人,不知道他们说的是什么语言 - 这个人仍然是法语,或意大利语,只是你还不知道。演员(即(String) obj)是你告诉编译器的相当于“我知道这个人会讲法语”

或者你可以得到它的阶级是这样的:

Class<?> clazz = obj.getClass(); 

一个Class实例可以使用做相同的检查:

String.class.isInstance(obj) { 
    String s = String.class.cast(obj); 
} 

您可以尝试使用instanceof或者你可以尝试getClass().isAssignableFrom(),任何适合您的需求