2016-12-08 7 views
0

Я использую ANTLR4 для анализа моего грамматиста и OWLAPI для работы над онтологиями. Поскольку я использую класс Listener, я не могу изменить тип возвращаемого значения. Вот пример:Явный тип возвращаемого типа в отношении метода заголовка

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); 
} 

Это ужасно, так как единственное, что я могу вернуться в печать, но я заинтересован, чтобы обеспечить тип возврата, который является булево (в данном примере), а не только печать, что я не может справиться. Невозможно изменить тип возвращаемого типа, потому что синтаксический анализатор аварийно завершает работу, поэтому есть ли у вас какие-либо конкретные предложения по решению этой ситуации?

+0

вы можете объявить логическую переменную? – haifzhan

+0

Да. Я просто нашел красивое решение, которое означает объявление булевой статической переменной и вызов ее вне этой функции (и класса). – user840718

ответ

1

Вы можете объявить логическую переменную экземпляра и использовать hasEntailed(), чтобы получить логическое значение (я использую hasEntails для различать с существующим методом isEntailed())

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); 
}