所以我试图浏览一个groovyObject的字段并获得该字段的属性。所以这就是我所得到的(对不起它有点粗糙,所以清理会受到赞赏但不是必要的,我还做了一些调试和其他东西与日志,什么不是。):
public void traverse(final GroovyObject groovy) throws RepositoryException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException
{
Field[] theFields = groovy.getClass().getDeclaredFields();
final ArrayList<Field> fields = new ArrayList<Field>();
int count =0;
for(Field field : theFields)
{
fields.add(field);
LOG.error("{} = {}",field.getName(), groovy.getProperty(field.getName()));
}
//this is the guava tree traverser
TreeTraverser<GroovyObject> traverser = new TreeTraverser<GroovyObject>()
{
@Override
public Iterable<GroovyObject> children(GroovyObject root)
{
return (Iterable<GroovyObject>)root.getProperty(fields.get(0).getName());
//|-->Here I get the String cannot be cast to Iterable. Which I find odd since it is still an object just getProperty takes a string. right?
}
};
对此的想法?谢谢你的帮助!
答案 0 :(得分:0)
GroovyObject.getProperty(String)
检索给定属性的值。如果该值恰好是String
,则无法将其转换为Iterable
。
如果调整日志语句,则可以检查字段的类型:
LOG.error("{} of type {} = {}", field.getName(), field.getType(), groovy.getProperty(field.getName()));
答案 1 :(得分:0)
所以我认为它超越了。基本上需要发生的是我需要创建两个迭代器:一个用于groovy对象,一个用于属性字符串,因此最终目标看起来像
groovyObject.iterate().next().getProperty(string.iterate().next());
或类似的东西,当我想出来时,我会更新它。!
一旦我这样做,我就可以回过头来考虑提高效率