You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Java的PMD XPath规则中判断两个ClassType节点是否代表同一类

在PMD XPath规则中判断两个ClassType节点是否代表同一类

针对你需要通用判断两个ClassType是否指向同一类的场景,PMD 7.x(含你使用的7.24.0版本)提供了两种直接的解决方式:

1. 直接使用类型比较函数(推荐)

PMD内置了pmd-java:areTypesEqual()函数,专门用于判断两个类型节点是否代表同一类,无需提前知晓全限定类名。该函数会自动处理短名、全限定名、导入类等各种引用场景的解析匹配。

示例XPath规则(以匹配类体中类型相同的两个字段为例):

//ClassBody[FieldDeclaration[1]/ClassType[pmd-java:areTypesEqual(., ../FieldDeclaration[2]/ClassType)]]

这个表达式会筛选出包含两个字段的类体,且这两个字段的ClassType指向同一个类。

2. 获取全限定类名后比较

如果你需要获取ClassType对应的全限定类名字符串,可以使用pmd-java:getResolvedTypeFQCN()函数,它会返回该节点解析后的类的FQCN,之后直接比较字符串即可。

示例XPath规则:

//FieldDeclaration[1]/ClassType[pmd-java:getResolvedTypeFQCN(.) = pmd-java:getResolvedTypeFQCN(../../FieldDeclaration[2]/ClassType)]

在你提供的示例代码中,两个ClassType节点调用该函数都会返回java.lang.String,因此比较结果为true。

内容的提问来源于stack exchange,提问作者toKrause

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 20:52:26