对于任何熟悉 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
提前非常感谢。