在OrientDB中,如何判断class是否继承自JavaAPI中的另一个?

In OrientDB, how to tell whether one class inherits from another in the Java API?

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

  V             ClassA
   \            /
  ClassB    ClassC
       \    /
       ClassD

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

我使用 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;
}