我想根据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块包含相同的处理(它有效,但我认为它是天真的)。
您能否告诉我问题出在哪里?如果使用其他替代方案实施我需要的东西))
答案 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);