【问题标题】:Ensure that a method in an enum exists with jQAssistant使用 jQAssistant 确保枚举中的方法存在
【发布时间】:2018-12-04 10:18:54
【问题描述】:

我想确保所有枚举都有一个名为 findByAttribute 的静态方法。

我可以选择方法

MATCH (enum:Enum) - [:DECLARES] -> (method:Method)
 WHERE method.static = true
 AND method.name = "findByAttribute"
RETURN enum.name, method.name

现在我想反转方法选择的条件。我试过NOT EXITS,但没用。

【问题讨论】:

    标签: java enums cypher jqassistant


    【解决方案1】:

    首先,这里有你可以使用的所有operators,以及如何使用它们

    最简单的方法是使用气泡对您的逻辑进行分组。 (这可能是通读一遍最容易理解的)

    MATCH (enum:Enum) - [:DECLARES] -> (method:Method)
     WHERE NOT (method.static = true
     AND method.name = "findByAttribute")
    RETURN enum.name, method.name
    

    其次是NOT (A and B)=NOT A OR NOT B

    MATCH (enum:Enum) - [:DECLARES] -> (method:Method)
     WHERE NOT method.static = true
     OR NOT method.name = "findByAttribute"
    RETURN enum.name, method.name
    

    或使用不等式运算符 <> 而不是反转布尔值

    MATCH (enum:Enum) - [:DECLARES] -> (method:Method)
     WHERE method.static <> true
     OR method.name <> "findByAttribute"
    RETURN enum.name, method.name
    

    EXISTS 只是检查是否设置了属性,因此在这里并不适用,因为它可以设置。


    假设你的意思是“这个方法不存在的地方”,你不能进行模式匹配(从返回中删除 method.name,因为没有逻辑方法可以将它包含在这个版本的查询中)

    MATCH (enum:Enum) 
     WHERE NOT (enum) - [:DECLARES] -> (:Method {static:true, name:"findByAttribute"})
    RETURN enum.name
    

    【讨论】:

      【解决方案2】:

      拿起上一个答案的最后一个查询,稍微改正一下:

      MATCH
        (enum:Enum:Type) 
      WHERE NOT
        (enum)-[:DECLARES]->(:Method {static:true, name:"findByAttribute"})
      RETURN
        enum.fqn
      

      【讨论】:

      • 您从哪里获得“类型”标签?您真正更改了“方法”var name 语法错误的唯一原因是什么? (现在我注意到了,就修复了)
      • jQA 大量使用标签组合,例如标签“Type”(表示 Java 类型)可以通过“Class”、“Interface”、“Annotation”或“Enum”进一步限定。此资格适用于已参与扫描的所有类别。那些被引用但未被扫描的(例如来自 JRE 的类型)仅标有“类型”。
      • 查看查询之间的差异我在match子句中添加了“Type”标签(“Enum”也可以与“Value”组合出现),删除重复的“--”(想如果可行)从 WHERE NOT 子句中更改 RETURN 子句以提供枚举类型的完全限定名称,而不仅仅是简单的类名(更具表现力)。
      猜你喜欢
      • 2010-09-18
      • 1970-01-01
      • 2018-01-26
      • 1970-01-01
      • 2019-05-29
      • 1970-01-01
      • 1970-01-01
      • 2022-06-18
      • 1970-01-01
      相关资源
      最近更新 更多