2016-12-08 7 views
0

私はANTLR4を使って文法を解析し、OWLAPIを使ってオントロジーを扱います。私はListenerクラスを使用しているので、戻り値の型は変更できません。ここでは例:私は返すことができる唯一のことは、印刷ですが、私は(この例では)ブールある戻り値の型を提供するために興味が、私だけではなく、印刷以来関数でJavaの異なる戻り値の型を使用します。

public void exitSubConcept(Parser.SubConceptContext ctx) { 
    OWLClassExpression first = stack.pop(); 
    OWLClassExpression second = stack.pop(); 
    OWLSubClassOfAxiom s = factory.getOWLSubClassOfAxiom(second, first); 
    if(reasoner.isEntailed(s)) 
    { 
     System.out.println(s.toString() + "is entailed"); 
    } 
    else 
    { 
     System.out.println(s.toString() + "is NOT entailed"); 
    } 
    super.exitSubConcept(ctx); 
} 

これはひどいです管理することはできません。 パーサーがをクラッシュさせるので、戻り値の型をvoidに変更する方法はありません。このような状況に対処するための特別な提案はありますか?

+0

あなたはブール変数を宣言することができますか? – haifzhan

+0

はい。私はちょうどブール値の静的変数を宣言し、この関数(およびクラス)の外で呼び出すことを意味するかなりの解決策を見つけました。 – user840718

答えて

1

あなたは、インスタンスのブール変数を宣言してブール値を取得するためにhasEntailed()を使用することができます(私は、既存のisEntailed()メソッドと区別するためhasEntailsを使用しています)

private boolean entailed = false; 

public boolean hasEntailed(){ 
    return entailed; 
} 

public void exitSubConcept(Parser.SubConceptContext ctx) { 
    OWLClassExpression first = stack.pop(); 
    OWLClassExpression second = stack.pop(); 
    OWLSubClassOfAxiom s = factory.getOWLSubClassOfAxiom(second, first); 
    if(reasoner.isEntailed(s)) 
    { 
     System.out.println(s.toString() + "is entailed"); 
     entailed = true; 
    } 
    else 
    { 
     System.out.println(s.toString() + "is NOT entailed"); 
     entailed = false; 
    } 
    super.exitSubConcept(ctx); 
} 
関連する問題