我正在使用
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,我认为会为原始类型包装器(整数,字符串等)调用正确的方法,但实际上,只调用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的优秀人才!