在OrientDB中,如何判断一个类是否从Java API继承另一个类?

时间:2016-10-21 18:35:46

标签: orientdb

如果您的数据模型具有嵌套类层次结构并且您使用的是SQL语法,则可以使用INSTANCEOF运算符将结果过滤为仅扩展给定类的对象。但是,使用Java API,并且只给出了两个类名,有什么方法可以找出一个类是否使用Java API继承(扩展)另一个类?如果你遇到这样的情况,你不能只检查superClasses属性:

  V             ClassA
   \            /
  ClassB    ClassC
       \    /
       ClassD

当你检索ClassD的超类时,你只会看到[ClassB,ClassC]。

1 个答案:

答案 0 :(得分:1)

我使用JavaScript在OrientDB Studio中创建了一个函数,名为DoesClassHaveSuperClass()。它需要两个字符串参数,checkClass和superClass。它使用递归函数调用来处理嵌套类。

// DoesClassHaveSuperClass()
// Input parameters: string "checkClass", string "superClass"
// This function looks to see whether "checkClass" inherits from "superClass",
// either directly or indirectly.
var schema = orient.getDatabase().getMetadata().getSchema();
return hasSuperClass(schema, checkClass, superClass);

function hasSuperClass(schema, checkClass, superClass) {
  var superClasses = schema.getClass(checkClass).getSuperClassesNames();
  if (superClasses.contains(superClass)) {
    return true;
  }
  else {
    for (var i = 0, len = superClasses.length; i < len; i++) {
      if (hasSuperClass(schema, superClasses[i], superClass)) {
        return true;
      }
    }
  }
  return false;
}