Использование Lambdaj для навигации по элементам Dom4j - PullRequest
0 голосов
/ 27 марта 2012

Для любого, кто знаком с 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

Заранее большое спасибо.

Ответы [ 2 ]

0 голосов
/ 27 марта 2012

Проблема 92 была поднята с помощью lambdaj, в соответствии с просьбой Марио Фуско (LambdaJ Developer)

0 голосов
/ 27 марта 2012

Если вы используете lambdaj 2.4, вам повезло, потому что эта проблема была исправлена ​​в этом выпуске.Проблема и ее решение описаны в первом пункте примечаний к выпуску в lambdaj 2.4.

В частности, lambdaj использует внутреннюю эвристику для создания заполнителя аргумента, но он не работает вв некоторых случаях, так что вы можете переопределить это, как объяснено там.

...