简单选择方法 (lambdaj) 获取异常



我是lambdaj的新手。这似乎是Java编程的一个很棒的功能。

所以我创建了一个非常简单的评估程序。

但是我得到了以下代码的例外。你能帮我怎么了吗?

-

-EDITED 没有为类 X 添加参数构造函数和封装的公共变量。谢谢@AVD。

import java.util.Arrays;
import java.util.List;
import static ch.lambdaj.Lambda.having;
import static ch.lambdaj.Lambda.on;
import static ch.lambdaj.Lambda.select;
public class Main {
    private static class X {
        private String name;
        public X(){
        }
        public X(String name) {
            this.name = name;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
    }
    public static void main(String[] args) {
        List<X> xs = Arrays.asList(
                new X("aaa"),
                new X("aaa"),
                new X("bbb")
        );
        List<X> s = select(xs, having(on(X.class).getName().equals("aaa")));
    }
}

结果是 :

Exception in thread "main" ch.lambdaj.function.argument.ArgumentConversionException: Unable to convert the placeholder false in a valid argument
    at ch.lambdaj.function.argument.ArgumentsFactory.actualArgument(ArgumentsFactory.java:92)
    at ch.lambdaj.function.matcher.HasArgumentWithValue.havingValue(HasArgumentWithValue.java:70)
    at ch.lambdaj.function.matcher.HasArgumentWithValue.havingValue(HasArgumentWithValue.java:58)
    at ch.lambdaj.Lambda.having(Lambda.java:1193)
    at Main.main(Main.java:34)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)

以这种方式更改表达式

List<X> s = select(xs, having(on(X.class).getName(), Matchers.equalTo("aaa")));

它会起作用。

只有在以下情况下,才能使用表达式

on(X.class).getName()

直接返回布尔值,例如

List<X> s = select(xs, having(on(X.class).isLowerCaseString());

其中isLowerCaseString()是一种X方法,如果所有名称字母都是小写,则返回 true。

相关内容

  • 没有找到相关文章

最新更新