开关(未知变量类型)

时间:2017-10-11 18:24:54

标签: java switch-statement owl-api

我想根据superClassII类型进行一些治疗。所以,我定义了:

ClassExpressionType superClassIIType = superClassII.getClassExpressionType();

if(superClassIIType =“ObjectMincardinality”or“ObjectExactCardinality”`so,

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 个答案:

答案 0 :(得分: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);