我是新手,流口水用法,我有一个小的查询。
我有如下地图,我使用schemaJson2Pojo java api为此创建了pojo:

{
"svo": [
      {
        "clause": "Sunanda Pushkar died of poisoning",
        "svoMetadata": {
          "person": "sunanda pushkar",
          "subjectType": "person_coref"
        },
        "objectPOS": "IN VBG;",
        "isRelatedKeySVO": false,
        "subjectPOS": " NNP NNP",
        "subject": "Sunanda Pushkar",
        "confidence": 0.9266232318014763,
        "verb": "died",
        "verbPOS": "VBN",
        "source": "OpenIE",
        "isKeySVO": true,
        "object": "of poisoning;"
      }]
}


注意:svo.svoMetadata具有人名

因此,在使用schemaJson2Pojo api时,将生成以下类:

class RootDoc
{
 private List<Svo> svo = new ArrayList<Svo>();

 public List<Svo> getSvo() {
        return svo;
    }


    public void setSvo(List<Svo> svo) {
        this.svo = svo;
    }
}

class Svo
{
  private SvoMetadata svoMetadata;

public SvoMetadata getSvoMetadata() {
        return svoMetadata;
    }


    public void setSvoMetadata(SvoMetadata svoMetadata) {
        this.svoMetadata = svoMetadata;
    }
}

class SvoMetadata
{
     private String person;

    public void setPerson(String person) {
        this.person = person;
    }

    public SvoMetadata withPerson(String person) {
        this.person = person;
        return this;
    }

}


我将RootDoc转发给drl,并尝试获取“ svoMetadata”的实例,如下所示,希望更新drl RHS中的人员:

drl中的规则如下:

when
        $mastermap : EsRootDoc($svolist:svo)
    $svo : Svo($svoMetadata2 : svoMetadata) from $svolist
         // $svoMetadata: SvoMetadata($t: $svo.getSvoMetadata())  // this gives me error
then
       $svoMetadata.setPerson("taranTaran");  // how do i get SvoMetadata instance to perform setPerson method????


我如何获取SvoMetadata实例以执行setPerson方法?

最佳答案

对于其他人,他们可能正在寻找上述NPE问题的drl语法。

    $mastermap : EsRootDoc($svolist:svo)
    $svo : Svo($svoMetadata2 : svoMetadata!=null,svoMetadata.person!=null) from $svolist


检查svoMetadata!= null解决了该问题。

关于java - 如何获得嵌套的类实例流口水,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44384063/

10-12 05:01