开关(未知变量类型)

switch (unknown variable type)

我想根据 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 块包含相同的处理(它有效但我认为它是幼稚的)。

能否请您告诉我问题出在哪里,是否可以使用其他替代方案来实现我需要的功能))

这最好由访问者来完成,尽管这需要您复制代码。如果您使用的是 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);