对于任何熟悉lambdaj (而不是我)的人,您以前都会看到这种堆栈跟踪或一些变化:
ch.lambdaj.function.argument.ArgumentConversionException:无法在ch.lambdaj.function.argument.ArgumentsFactory.actualArgument(ArgumentsFactory.java:92) at ch.lambdaj.function.matcher.HasArgumentWithValue.havingValue(HasArgumentWithValue.java:70) at ch.lambdaj.Lambda.having(Lambda.java:1204)的有效参数中转换占位符org.dom4j.tree.AbstractAttribute
我的理解是,这是通过最后类的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的属性接口,得到了同样的问题,然后想也许lambdaj不喜欢接口。因此,我切换到了AbstractAttribute抽象类。
lambdaj和抽象类有问题吗?还是我的方法只是裤子?有什么办法解决这个问题吗?
我正在使用lambdaj2.4和dom4j 1.6
提前谢谢。
发布于 2012-03-27 11:22:52
问题92已按照Mario ( lambdaj开发人员)的要求向LambdaJ提出。
发布于 2012-03-27 09:56:36
如果使用lambdaj2.4,则幸运的是,该版本已经修复了此问题。问题及其解决方法在lambdaj2.4的发布说明的第一点中进行了描述。
特别是lambdaj使用内部启发式来创建参数的占位符,但在某些情况下它不起作用,因此您可以重写它,如这里所解释的那样。
https://stackoverflow.com/questions/9880490
复制相似问题