2016-12-08 1 views
0

Ich benutze ANTLR4, um meine grammer und OWLAPI zu analysieren, um auf Ontologien zu arbeiten. Da ich die Listener-Klasse verwende, kann ich den Rückgabetyp nicht ändern. Hier ein Beispiel:Java verschiedene Rückgabetyp in einer Funktion in Bezug auf die Header-Methode

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

Das ist schrecklich, da das einzige, was ich zurückkehren kann ein Ausdruck ist, aber ich bin daran interessiert, einen Rückgabetyp zu schaffen, die boolean ist (in diesem Beispiel), nicht nur ein Druck, dass ich kann nicht verwalten. Es gibt keine Möglichkeit, den Rückgabetyp void zu ändern, weil der Parser abstürzt. Haben Sie also spezielle Vorschläge, um mit dieser Art von Situation umzugehen?

+0

können Sie eine boolean Variable deklarieren? – haifzhan

+0

Ja. Ich habe gerade eine schöne Lösung gefunden, die eine boolesche statische Variable deklariert und sie außerhalb dieser Funktion (und Klasse) aufruft. – user840718

Antwort

1

Sie können eine Instanz boolean Variable deklarieren und hasEntailed() verwenden den Booleschen Wert zu erhalten (I hasEntails verwenden, um mit dem vorhandenen isEntailed() -Methode unterscheiden)

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