Java反射,对象有什么类?

时间:2012-01-08 09:32:44

标签: java reflection

我试图对applet做一些反思。 我找到的东西是一些整数,字符串,对象等数组。

例如,如果有一个带有对象[]和对象[0]的字段.toString()= [I @ 7593c366 然后我知道它是一个整数数组。但是,如果它说aa @ 98324ca33是它的班级呢? 我正在使用一个类加载器,所以当我看到这个时我的第一个猜测我需要加载aa类(在@之前的部分,并在其中使用该对象。但我不确定该部分是否为@是该类。可以有人说我这是对的吗?还是有其他想法?

日Thnx!

3 个答案:

答案 0 :(得分:5)

你不应该使用toString() - 首先,它可以被覆盖。作为一个简单的例子:

Object x = "aa@98324ca33";
String bogusClassName = x.toString();

如果x在这里引用类型为aa的对象,则显然是错误的 - 它指的是字符串。

您只需在其上调用getClass()即可找到任何对象的类:

Object x = new SomeType();
Class<?> clazz = x.getClass();

目前还不是很清楚你要做什么或者从哪里获取信息,但你肯定不应该使用toString来确定所涉及的课程。

答案 1 :(得分:2)

是的,@之前的部分是fqn类,但你不应该依赖它。对象可以覆盖toString(),然后您的逻辑将失败。

改为使用obj.getClass()

答案 2 :(得分:2)

查看班级java.lang.Class。只需在对象上调用getClass即可检索其类,而不是使用toString方法

Object anObject = ... ;
Class<?> clazz = anObject.getClass();

如果要检查它是否是数组,可以使用Class#isArray()方法

clazz.isArray()

另一种方式也是可能的。如果您有Class实例,则可以使用Class#isInstance( Object )方法确定对象是否属于此类

clazz.isInstance( anObject );