在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;
}
如果您的数据模型具有嵌套的 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;
}