1

给定这样的 Java 接口:

class Hobby {
    public String getName() {...}
}

class Person {
    public Iterable<Hobby> getHobbies() {...}
}

如何在 LHS 表达式中选择具有特定名称的爱好对象。例如,像这样:

when
    $person: Person()
    $hobby: Hobby(name == "Knitting") from $person.hobbies

这应该工作吗?当我们尝试它时,它不会产生任何结果。

Iterable考虑到返回 a而不是 a的 Java 代码,是否有替代方案Collection

4

1 回答 1

2

修复不匹配的 person/$person 后,如果爱好集合中有“Knitting”的人,规则将编译并触发。(版本 5.5,但我毫不怀疑其他版本也能正常工作。)

rule "who knits"
when
  $person: Person( $name: name )
  Hobby(name == "Knitting") from $person.hobbies
then
  System.out.println( "Knitting: " + $name );
end

public class Person {
  private String name;
  private List<Hobby> hobbies = new ArrayList<Hobby>();
  public String getName(){
    return name;
  }  
  public Iterable<Hobby> getHobbies(){
     return hobbies;
  }
}

此外,我在您发布的片段中看不到任何Java 接口,只有两个类。

如果您有问题,请确保提供完整的代码来重现该示例。

于 2015-01-29T04:59:28.077 回答