0

对于任何熟悉 lambdaj(不是我)的人,您之前都会看到这个堆栈跟踪或一些变体:

ch.lambdaj.function.argument.ArgumentConversionException:无法在 ch.lambdaj 的 ch.lambdaj.function.argument.ArgumentsFactory.actualArgument(ArgumentsFactory.java:92) 的有效参数中转换占位符 org.dom4j.tree.AbstractAttribute。 function.matcher.HasArgumentWithValue.havingValue(HasArgumentWithValue.java:70) 在 ch.lambdaj.Lambda.having(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

提前非常感谢。

4

2 回答 2

0

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

特别是 lambdaj 使用内部启发式方法来创建 Argument 的占位符,但在某些情况下它不起作用,因此您可以按照那里的说明覆盖它。

于 2012-03-27T09:56:36.417 回答
0

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

于 2012-03-27T11:22:52.633 回答