Для любого, кто знаком с 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)
Мое понимание состоит в том, что это происходит из-за ограничения лямбдажа на последние занятия.
Я получаю вышеуказанное при тестировании следующего кода:
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;
}
}
Я использовал интерфейс Attribute в dom4j, получил ту же проблему, но подумал, что lambdaj не любит интерфейсы ... поэтому я переключился на абстрактный класс AbstractAttribute.
Есть ли проблема с lambdaj и абстрактными классами? Или мой метод - просто штаны? Есть идеи как это решить?
К вашему сведению: я использую lambdaj 2.4 и dom4j 1.6
Заранее большое спасибо.