2017-10-11 6 views
0

Ich möchte einige Behandlungen in Abhängigkeit von superClassII Art zu tun. Also, ich definiert:Schalter (unbekannter Variablentyp)

ClassExpressionType superClassIIType = superClassII.getClassExpressionType(); 

If (superClassIIType = "ObjectMincardinality" or "ObjectExactCardinality" `so,

I do the same treatment for superClassII 

else wir nichts tun

Hier ist ein Teil meines Quellcodes ist. :

switch(superClassIIType){ 
    case OBJECT_EXACT_CARDINALITY: 
    case OBJECT_MIN_CARDINALITY: 
     if ((((superClassIIType)superClassII).getProperty().equals(
      ((OWLObjectMinCardinality)superClass).getProperty()){ 

      int superClassIICardinality =((superClassIIType)superClassII).getCardinality(); 
      ... 
     } 
     break; 
    default: 
     break; 
} 

Aber es scheint, dass superClassIIType wird nicht akzeptiert. Ich habe versucht, zu tun, was ich brauche, durch eine einfache if ...else, wo die if und else Blöcke beide die gleiche Behandlung enthalten (es funktioniert, aber ich denke, es ist naiv).

Könnten Sie mir bitte sagen, wo das Problem ist, und wenn das umzusetzen, was ich eine andere Alternative verwenden muß))

+1

Dies ist eher ein Java-Problem als es mit OWL zu tun hat. 'superClassIIType' ist ein Objekt, keine Java-Klasse. Sie können nicht in diese Klasse umwandeln. Die zugehörigen Schnittstellen sind ['OWLObjectExactCardinality'] (http://owlcs.github.io/owlapi/apidocs_4/org/semanticweb/owlapi/model/OWLObjectExactCardinality.html) und [' OWLObjectMinCardinality'] (http: //owlcs.github .io/owlapi/apidocs_4/org/semantischesweb/owlapi/model/OWLObjectMinCardinality.html). – dhke

+0

... aber Sie können wahrscheinlich mit Casting auf ['OWLObjectCardinalityRestriction'] (http://owlcs.github.io/owlapi/apidocs_4/org/semanticweb/owlapi/model/OWLObjectCardinalityRestriction.html) in Ihrem Fall, die hat die gewünschten Methoden. – dhke

Antwort

2

Der am besten mit einem Besucher gemacht wird, obwohl es erfordert, dass Sie den Code zu duplizieren. Wenn Sie OWLAPI 5 verwenden, implementieren Sie OWLClassExpressionVisitor - hier sind Standardmethoden für alles, so müssen Sie nur die beiden Methoden für die Typen implementieren, die Sie verwenden möchten.

OWLClassExpressionVisitor visitor = new OWLClassExpressionVisitor() { 
     public void visit(OWLObjectMinCardinality c) { 
      int superClassIICardinality = c.getCardinality(); 
     } 

     @Override 
     public void visit(OWLObjectExactCardinality ce) { 
      int superClassIICardinality = c.getCardinality(); 
     } 
    }; 
    superClassII.accept(visitor);