2017-10-11 81 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

这更像是一个Java问题,它与OWL有什么关系。 'superClassIIType'是一个对象,而不是一个java类,你不能强制转换它。相关的接口是['OWLObjectExactCardinality'](http://owlcs.github.io/owlapi/apidocs_4/org/semanticweb/owlapi/model/OWLObjectExactCardinality.html)和['OWLObjectMinCardinality'](http://owlcs.github .IO/owlapi/apidocs_4 /组织/ semanticweb/owlapi /模型/ OWLObjectMinCardinality.html)。 – dhke

+0

...但是你可能会在你的情况下逃离['OWLObjectCardinalityRestriction'](http://owlcs.github.io/owlapi/apidocs_4/org/semanticweb/owlapi/api_id/objectCardinalityRestriction.html),有所需的方法。 – dhke

回答

2

这是最好的与访客进行,虽然它会要求你重复的代码。如果您正在使用OWLAPI 5,请执行OWLClassExpressionVisitor - 这里是所有内容的默认方法,因此您必须针对您希望使用的类型实施两种方法。

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