对于任何熟悉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