使用Lambdaj在Dom4j元素中导航



对于任何熟悉lambdaj(而不是我)的人来说,你都会在之前看到这个堆栈或一些变体

ch.lambdaj.function.argument.ArgumentConversionException:无法将占位符org.doc4j.tree.AbstractAttribute转换为有效的的论点ch.lambdaj.function.argument.ArgumentsFactory.actualArgument(ArgumentsFactory.java:92)在ch.lambdaj.function.matcher.HasArgumentWithValue.havingValue(HasArgumentAWithValue.java:70)在ch.lambdaj.Lambda.具有(Lambda.java:1204)

我的理解是,这是通过lambdaj对final类的限制而发生的。

我在测试以下代码时得到了以上信息:

import static ch.lambdaj.Lambda.having;
import static ch.lambdaj.Lambda.selectFirst;
import static org.hamcrest.CoreMatchers.equalTo;
import java.util.List;
import org.dom4j.tree.AbstractAttribute;
public class DocumentUtils {
    public static String getAttributeValueFromListByName(
            List<AbstractAttribute> list, String name) {
        AbstractAttribute requiredAttribute = selectFirst(list,
                having((AbstractAttribute.class).getName(), equalTo(name)));
        String value = requiredAttribute.getValue();
        return value;
    }
}

我一直在使用dom4j的Attribute接口,遇到了同样的问题,然后想也许lambdaj不喜欢接口。。所以我切换到AbstractAttribute抽象类。

lambdaj和抽象类有问题吗?还是我的方法只是权宜之计?有什么办法解决这个问题吗?

仅供参考:我正在使用lambdaj 2.4和dom4j 1.6

提前非常感谢。

如果您使用的是lambdaj 2.4,那么您很幸运,因为该版本中已经修复了此问题。这个问题及其解决方案在lambdaj 2.4发行说明的第一点中进行了描述。

特别是lambdaj使用内部启发式方法来创建Argument的占位符,但在某些情况下它不起作用,因此您可以覆盖它,如文中所述。

根据Mario Fusco(lambdaj开发人员)的要求,已向lambdaj提出问题92

相关内容

  • 没有找到相关文章

最新更新