2017-10-11 3 views
0

superClassII 유형에 따라 일부 치료를하고 싶습니다. 그래서, 나는 정의 :스위치 (알 수없는 변수 유형)

ClassExpressionType superClassIIType = superClassII.getClassExpressionType(); 

때문에,

I do the same treatment for superClassII 

else

은 우리가 아무것도 여기

내 소스 코드의 일부이다 (superClassIIType = "ObjectMincardinality" or "ObjectExactCardinality"`합니다. :

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'는 자바 클래스가 아닌 객체입니다. 당신은 그것에 캐스트 할 수 없습니다. 관련 인터페이스는 ['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을 구현하십시오. 여기에는 모든 기본 메소드가 있으므로 사용하려는 유형에 대해 두 가지 메소드 만 구현하면됩니다.

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