对于熟悉lambdaj(不是我)的人来说,你之前会看到这个堆栈跟踪或一些变体:
ch.lambdaj.function.argument.ArgumentConversionException:无法执行 将占位符org.dom4j.tree.AbstractAttribute转换为有效的 争论在 ch.lambdaj.function.argument.ArgumentsFactory.actualArgument(ArgumentsFactory.java:92) 在 ch.lambdaj.function.matcher.HasArgumentWithValue.havingValue(HasArgumentWithValue.java:70) 在ch.lambdaj.Lambda.having(Lambda.java:1204)
我的理解是,这是通过限制lambdaj和最终类来实现的。
我在测试以下代码时得到了上述代码:
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
提前多多感谢。
答案 0 :(得分:0)
如果您正在使用lambdaj 2.4,那么您很幸运,因为该版本已修复此问题。问题及其解决方案在lambdaj 2.4的release notes的第一点中描述。
特别是lambdaj使用内部启发式来创建Argument的占位符,但在某些情况下它不起作用,因此您可以按照那里的说明覆盖它。
答案 1 :(得分:0)
根据Mario Fusco(LambdaJ开发人员)的要求,已经使用lambdaj提出了第92期