2017-10-11 11 views
0

superClassIIタイプに応じていくつかの治療をしたいと思います。だから、私は定義された:。スイッチ(不明な変数タイプ)

ClassExpressionType superClassIIType = superClassII.getClassExpressionType(); 

を(superClassIITypeは= "ObjectMincardinality" or "ObjectExactCardinality" `ので、

I do the same treatment for superClassII 

else我々は何もしない場合

ここに私のソースコードの一部です:

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

しかし、superClassIITypeは受け付けていません。私は、私が必要とするものを、単純にif ...elseにしようとしました。ifブロックとelseブロックには両方とも同じ処理が含まれています(それは動作しますが、それは素朴だと思います)。問題があると私は)別の代替を使用して必要なものを実装する場合はどこでコードを複製する必要がしますが、

あなたは、これは訪問者に最も行われている)

+1

これは、OWLと何か関係があるよりもJavaの問題に似ています。 'superClassIIType'はオブジェクトであり、Javaクラスではありません。キャストすることはできません。関連するインタフェースは['OWLObjectExactCardinality'](http://owlcs.github.io/owlapi/apidocs_4/org/semanticweb/owlapi/model/OWLObjectExactCardinality.html)と[' OWLObjectMinCardinality'](http://owlcs.github .io/owlapi/apidocs_4/org/semanticweb/owlapi/model/OWLObjectMinCardinality.html)。 – dhke

+0

...あなたのケースでは、おそらく['OWLObjectCardinalityRestriction'](http://owlcs.github.io/owlapi/apidocs_4/org/semanticweb/owlapi/model/OWLObjectCardinalityRestriction.html)にキャストすることができます。所望の方法を有する。 – dhke

答えて

2

を教えてくださいでした。 OWLAPI 5を使用している場合は、OWLClassExpressionVisitorを実装してください - ここではすべてのデフォルトメソッドですので、使用するタイプの2つのメソッドだけを実装する必要があります。

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