【问题标题】:Using Lambdaj to Navigate Through Dom4j Elements使用 Lambdaj 浏览 Dom4j 元素
【发布时间】:2012-03-27 19:22:52
【问题描述】:

对于熟悉 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 对 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

非常感谢。

【问题讨论】:

  • 只是为了清楚;我只对这是否可以在 lambdaj 中实现感兴趣。当我说“任何想法如何解决这个问题?”时,我的意思是使用 lambdaj “解决”。谢谢! (我也想知道评论是否会影响我的帖子,我昨晚提出了这个问题drums finger

标签: junit4 dom4j lambdaj


【解决方案1】:

如果您使用的是 lambdaj 2.4,那么您很幸运,因为该问题已在该版本中得到修复。该问题及其解决方案在 lambdaj 2.4 的release notes 的第一点中进行了描述。

特别是 lambdaj 使用内部启发式方法来创建 Argument 的占位符,但在某些情况下它不起作用,因此您可以按照那里的说明覆盖它。

【讨论】:

  • 谢谢马里奥,我是否可以从您的回答中得知,我得到的 ArgumentConversionException 与我的 AbstractAttribute 无关,而是与字符串 .getName() 有关?所以我可以使用发行说明中“第 1 点”中描述的解决方案的一些变体来解决我的问题?
  • 不,这不是重点。无论如何忘记我之前写的内容:它仅用于最终课程,这不是你的情况。实际上 lambdaj 应该总是能够为抽象类创建参数占位符,当然也可以为接口创建参数占位符,因为在最后一种情况下,它可以使用本地 java 代理机制。恐怕您遇到了 lambdaj 错误。您能否在附加失败的测试用例的 lambdaj 问题跟踪上打开一个问题。如果可能,请使用接口而不是抽象类。谢谢
  • 当然,我今晚会创建一个问题。感谢您清除它。
【解决方案2】:

应 Mario Fusco(LambdaJ 开发人员)的要求,已使用 lambdaj 提出问题 92

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2016-04-08
    • 1970-01-01
    • 1970-01-01
    • 2017-03-07
    • 1970-01-01
    相关资源
    最近更新 更多