2012-02-15 35 views
3

我有一个简单的POJO:与Lambdaj简单的提取物导致“无法转换占位符空”

class UserId { 
    String ssn; 
    String otsId; 
    Integer actorId; 

    public UserId(String ssn, String otsId, Integer actorId) { 
    this.ssn = ssn; 
    this.otsId = otsId; 
    this.actorId = actorId; 
    } 

    @Override 
    public String toString() { 
    return "[otsId=" + otsId + ", ssn=" + ssn + ", actorId=" + actorId + "]"; 
    } 
} 

我想从那里抽取例如所有ssn值到List<String>。因此,正如一个例子,我写:

public class UserIdTest { 

    public static void main(String[] args) { 
    List<UserId> list = new ArrayList<UserId>(); 
    list.add(new UserId("111111-1111", "12345678", new Integer(234589235))); 
    list.add(new UserId("111111-1111", "12345678", new Integer(234589235))); 
    list.add(new UserId("111111-1111", "12345678", new Integer(234589235))); 

    getSsnList(list); 
    } 

    private static List<String> getSsnList(List<UserId> users) { 
    return extract(users, on(UserId.class).ssn); 
    } 
} 

和LambdaJ抛出:

Exception in thread "main" ch.lambdaj.function.argument.ArgumentConversionException: Unable to convert the placeholder null in a valid argument 
at ch.lambdaj.function.argument.ArgumentsFactory.actualArgument(ArgumentsFactory.java:76) 
at ch.lambdaj.function.convert.ArgumentConverter.<init>(ArgumentConverter.java:29) 
at ch.lambdaj.Lambda.extract(Lambda.java:1035) 
at UserIdTest.getSsnList(UserIdTest.java:23) 
at UserIdTest.main(UserIdTest.java:20) 

这似乎是一个很基本的操作,我缺少什么吗?

回答

8

Lambdaj用代理包装您的(非最终)类并拦截它们的METHOD调用。这意味着它不能在字段上工作,但只能在这种方法上工作:

extract(users, on(UserId.class).getSsn());