我是新手,流口水用法,我有一个小的查询。
我有如下地图,我使用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/