2017-10-11 12 views
0

Je souhaite effectuer certains traitements en fonction du type superClassII. Alors, je définissais:commutateur (type de variable inconnue)

ClassExpressionType superClassIIType = superClassII.getClassExpressionType(); 

Si (superClassIIType = "ObjectMincardinality" or "ObjectExactCardinality" `donc,

I do the same treatment for superClassII 

else nous ne faisons rien

Voici une partie de mon code source. :

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

Mais, il semble que superClassIIType n'est pas accepté. J'ai essayé de faire ce dont j'ai besoin par un simple if ...else où les blocs if et else contiennent tous les deux le même traitement (ça marche mais je pense que c'est naïf).

Pourriez-vous s'il vous plaît me dire où est le problème et si mettre en œuvre ce que je dois utiliser une autre solution de rechange))

+1

Cela ressemble plus à un problème de Java que cela n'a rien à voir avec OWL. 'superClassIIType' est un objet, pas une classe Java, Vous ne pouvez pas lancer de cast. Les interfaces associées sont ['OWLObjectExactCardinality'] (http://owlcs.github.io/owlapi/apidocs_4/org/semanticweb/owlapi/model/OWLObjectExactCardinality.html) et [' OWLObjectMinCardinality'] (http: //owlcs.github .io/owlapi/apidocs_4/org/semanticweb/owlapi/modèle/OWLObjectMinCardinality.html). – dhke

+0

... mais vous pouvez probablement vous en sortir en transposant [OWLObjectCardinalityRestriction'] (http://owlcs.github.io/owlapi/apidocs_4/org/semanticweb/owlapi/model/OWLObjectCardinalityRestriction.html) dans votre cas, a les méthodes souhaitées. – dhke

Répondre

2

Ceci est mieux fait avec un visiteur, même si elle vous demandera de dupliquer le code. Si vous utilisez OWLAPI 5, implémentez OWLClassExpressionVisitor - voici les méthodes par défaut pour tout, donc vous devrez implémenter seulement les deux méthodes pour les types que vous souhaitez utiliser.

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