我正在使用Java的反射API,编写方法来检查给定对象并描述其字段、方法等信息。
我正在使用
(为简化起见,其他原始类型和数组被省略。)
尽管
目前,我找到的唯一解决方案是如果可能的话,像这样粗暴地向下转换对象:
我正在使用
getFields()
方法迭代不同的属性并显示对象内容:public static void display(Integer i)
{
System.out.println("An integer: " + i);
}
// Basically a method for each primitive type wrapper
public static void display(Object o)
{
for (Field f : c.getFields())
{
System.out.println("A " + o.getClass() + " which is composed of:");
display(f.get(o));
}
}
(为简化起见,其他原始类型和数组被省略。)
尽管
Field
的 get
方法返回一个 Object
,但我认为适当的方法会被调用来处理原始类型包装器(Integers、Strings 等),但实际上,只有 display(Object o)
被调用(不执行隐式向下转换)。目前,我找到的唯一解决方案是如果可能的话,像这样粗暴地向下转换对象:
public static void display(Object o)
{
if (o instanceof Integer)
{
display((Integer) o);
return;
}
else if (o instanceof String
{
...
} // And so on
for (Field f : c.getFields())
{
System.out.println("A " + o.getClass() + " which is composed of:");
display(f.get(o));
}
}
然而,这似乎有些丑陋,我想知道是否有更优雅的方法来确保调用正确的方法。 有什么想法吗?
提前感谢StackOverflow的好心人!
(Integer)o
是向下转型。 - Oliver Charlesworth