JanusGraph Kotlin开发场景下select步骤的具体类型是什么?
问题原因
Kotlin无法推断TinkerPop select()步骤的泛型类型,无显式泛型声明的select(String key)默认返回GraphTraversal<*, *>类型,无法匹配from()/to()方法要求的顶点遍历器输入类型,因此触发编译报错。
select步骤的具体类型
你通过aggregate("user")、aggregate("subscription")存入侧路栈的是Vertex类型元素的集合,因此两个select步骤的完整类型如下:
select("user"):GraphTraversal<*, MutableList<Vertex>>select("subscription"):GraphTraversal<*, MutableList<Vertex>>
修复方案
给select步骤显式指定泛型即可解决类型推断问题,修改后的代码如下:
val query = g.V().hasLabel(VLabels.USER).fold().coalesce( unfold(), addV<Vertex>(VLabels.USER) ).aggregate("user").V().hasLabel(VLabels.SERVICE_SUBSCRIPTION).fold().coalesce( unfold<Vertex>(), addV<Vertex>(VLabels.SERVICE_SUBSCRIPTION) .aggregate("subscription") .sideEffect(addE<Edge>(ELabels.OWNS) .from(select<List<Vertex>>("user").unfold()) .to(select<List<Vertex>>("subscription").unfold()) ) ).next()
内容的提问来源于stack exchange,提问作者Serhii Zadorozhnyi
相关产品推荐
相关产品推荐

