使用 JavaParser 解析类声明中的类型引用:避免 FQ 名称的意外行为

使用 javaparser 解析类声明中的类型引用:避免 fq 名称的意外行为

正如摘要所说,在使用 JavaParser 解析 Java 代码时,提取类或接口声明中的类型引用时,可能会遇到完全限定名 (FQ) 被错误地分解成多个部分的问题。例如,解析 java.lang.String 时,可能会得到 java.lang.String、java.lang 和 java 三个结果,而不是期望的单个 java.lang.String。这会给后续处理带来不便。本文将介绍如何使用递归方法准确地提取所需的类型名称,并避免这些不必要的中间结果。

问题分析

在使用 JavaParser 时,如果直接使用 stream().filter(ClassOrInterfaceType.class::isInstance) 的方式提取类型,JavaParser 会将完全限定名 (FQ) 分解为多个部分。这是因为 JavaParser 会遍历类型名称的每个组成部分,并将它们都识别为 ClassOrInterfaceType。

解决方案:递归方法

为了解决这个问题,我们可以使用递归方法来提取类型名称。以下是一个示例代码:

import com.github.javaparser.StaticJavaParser;import com.github.javaparser.ast.CompilationUnit;import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration;public class TypeExtraction {    public static void main(String[] args) {        String s = "class Foo extends java.lang.String {}";        CompilationUnit cu = StaticJavaParser.parse(s);        cu.findAll(ClassOrInterfaceDeclaration.class).forEach(cid -> {            System.out.println("Class Name: " + cid.getNameAsString());            cid.getExtendedTypes().forEach(extType -> System.out.println("Extended Type: " + extType.getNameAsString()));        });    }}

代码解释:

立即学习“Java免费学习笔记(深入)”;

导入必要的类: 导入 StaticJavaParser、CompilationUnit 和 ClassOrInterfaceDeclaration 等 JavaParser 相关的类。解析 Java 代码: 使用 StaticJavaParser.parse(s) 解析包含类声明的 Java 代码字符串。查找类或接口声明: 使用 cu.findAll(ClassOrInterfaceDeclaration.class) 查找所有类或接口声明。遍历并提取类型信息:使用 forEach 循环遍历找到的每个类或接口声明。使用 cid.getNameAsString() 获取类名。使用 cid.getExtendedTypes() 获取类继承的所有类型。再次使用 forEach 循环遍历继承的每个类型,并使用 extType.getNameAsString() 获取类型名称。

运行结果:

Class Name: FooExtended Type: String

关键点:

使用 ClassOrInterfaceDeclaration.getExtendedTypes() 方法获取继承的类型,可以避免直接解析类型字符串,从而避免 FQ 名称被分解的问题。这种方法只提取了类或接口直接继承的类型,如果需要提取所有间接继承的类型,则需要使用递归方法。

注意事项

该方法仅适用于提取类或接口声明中 extends 或 implements 关键字后的类型引用。如果需要提取方法参数、局部变量等其他位置的类型引用,需要使用不同的 JavaParser API。在使用 JavaParser 时,需要注意其版本兼容性,不同版本的 API 可能有所不同。

总结

本文介绍了一种使用 JavaParser 解析 Java 代码时,提取类或接口声明中的类型引用的方法,并解决了 FQ 名称被错误分解的问题。通过使用 ClassOrInterfaceDeclaration.getExtendedTypes() 方法,我们可以准确地提取所需的类型名称,避免不必要的中间结果。希望本文能帮助您更好地使用 JavaParser 进行 Java 代码分析。

以上就是使用 JavaParser 解析类声明中的类型引用:避免 FQ 名称的意外行为的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/64501.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月11日 18:43:28
下一篇 2025年11月11日 19:05:51

相关推荐

  • 波场(TRX)前景如何?TRX币2025年、2026年-2030年价格预测

    2025年TRX价格有望升至0.48美元,乐观情境下冲击0.7美元,短期关注0.309与0.343美元阻力位;2026年若生态扩展顺利,价格或向1.0美元推进;2030年保守预计达0.88-1.0美元,若实现大规模应用则可能挑战3.57美元,但需应对竞争与监管风险。 主流波场币交易平台官网入口 1、…

    2025年12月9日
    000
  • NEAR协议(NEAR)价格发展史 NEAR历史K线图数据2025整理

    NEAR协议价格从2020年$0.50起步,经历2021年牛市涨至近$20,2022-2023年熊市回调至$1.50-$3.00震荡盘整,期间推进技术升级,2024年因DeFi、NFT及AI应用爆发,活跃用户飙升,TVL增长5倍,价格回升至$4以上,%ignore_a_1%聚焦AI融合,生态基本面持…

    2025年12月9日
    000
  • AI+Crypto是什么概念?盘点人工智能与区块链结合的五大应用方向

    AI+Crypto通过融合人工智能与区块链,构建去中心化智能系统:一、去中心化算力网络整合全球闲置GPU资源,降低AI算力成本90%,如io.net、Aethir和Bittensor实现分布式训练;二、数据隐私保护结合零知识证明与区块链存储,确保医疗等敏感数据“可用不可见”,Arweave保障数据主…

    2025年12月9日
    000
  • 加密世界的价值捕获:详解协议收入与代币价格的真实关系

    协议收入通过回购销毁、质押分红和国库赋能传导至代币价值,但需警惕高通胀、低效治理与市场情绪导致的价值脱钩。 加密协议的收入是衡量其健康度的关键,但高收入并不直接等于高币价。真正的价值捕获在于收入如何有效回馈给代币持有者,这需要深入分析其经济模型和治理机制。 协议收入的核心来源 1、交易手续费:这是最…

    2025年12月9日
    000
  • 什么是流动性池(LP)?为DeFi提供流动性如何赚钱和亏钱

    流动性池通过用户存入等值双币形成交易对,支持去中心化交易所运作。参与者获得LP Token代表份额,并可赎回本金与收益。主要收益来自交易手续费分红(如0.3%)和项目方激励代币奖励,后者推高收益率但伴随代币价格波动风险。当资产市价大幅波动时,套利行为引发无常损失,导致实际价值低于持有资产;可通过选择…

    2025年12月9日
    000
  • Solana怎么进行代币转账?Solana链上转账的详细操作流程

    使用钱 包、编程或批量工具可完成Solana链上代币转账。一、钱 包转账:打开Phantom等钱 包,选择SPL代币,输入接收地址与数量,确认交易并签名。二、JavaScript SDK转账:通过Web3.js和spl-token库,连接网络,加载私钥,获取ATA账户,构建并发送交易。三、批量工具转…

    2025年12月9日
    000
  • Polkadot衍生品AI预测工具有哪些?Polkadot衍生品AI预测工具APP大全

    Polkadot衍生品市场正融合AI技术,Phala Network通过隐私计算支持链上AI-Agent协作,OriginTrail构建去中心化知识图谱提升数据可信度,结合XCM跨链机制聚合多链数据训练专属预测模型。 Polkadot衍生品市场正吸引AI技术深度整合,多款工具应运而生。 2025其他…

    2025年12月9日
    100
  • 如何为自己制定一份详细的加密货币学习计划?

    明确目标后分阶段学习加密货币,需从基础理论入手,逐步深入技术模块并结合实践操作。首先确定兴趣点与阶段性目标,如理解比特币原理或分析白皮书;其次构建知识体系,掌握哈希函数、共识机制等核心技术,阅读中本聪白皮书及以太坊文档,完成Coursera等平台入门课程;然后分模块学习区块链架构、代币经济、DeFi…

    2025年12月9日
    000
  • 哈吉米是什么币?怎么买?未来价值如何

    1、币安Binance 币安Binance官网入口: 币安BinanceAPP下载链接: 2、欧易okx 欧易okx官网入口: 欧易okxAPP下载链接: 3、火币HTX 官网入口: APP下载链接: 一、哈吉米币的定义与技术基础 了解任何数字资产的基础,都需要从其定义和构建的技术框架入手。哈吉米币…

    2025年12月9日
    000
  • 一文读懂:恒星币二层空投怎么用的

    恒星币二层空投需先验证资格,用户访问官网查询地址是否符合领取条件,完成指定链上任务后绑定Stellar储存包地址,通过签名验证所有权,随后在空投门户点击领取并选择对应代币类型,确认交易后等待区块链确认到账,最后通过区块浏览器核查资产余额,若未成功可核对地址、重试操作或联系客服处理异常。 恒星币二层空…

    2025年12月9日
    000
  • 链链接铭文最新状态查询方法有哪些?一文了解币圈

    使用区块链浏览器、铭文交易平台和API接口可查询铭文最新状态。首先通过OrdinalScan等浏览器输入地址或交易哈希,查看铭文编号、归属与转移记录;其次登录Magic Eden等平台的“我的资产”页面,核对铭文上架、售出等状态标签;最后开发者可通过Ordinals API获取密钥、构造请求并解析J…

    2025年12月9日
    000
  • 修仙币是什么?怎么买?未来能涨到多少

    修仙币是一种基于区块链技术的数字规则,其设计灵感常来源于东方玄幻文化。它代表了社群特定的意识形态与属性文化,在去中心化的网络中流转。 Binance币安 欧易OKX ️ 一、了解修仙币(修仙) 本部分旨在介绍修仙币的基本概念和属性,帮助用户理解其作为一个数字资产的构成。它通常作为一种社区代币或某种应…

    好文分享 2025年12月9日
    000
  • 山寨币(Altcoin)是什么?如何在海量项目中发现价值币?

    山寨币是比特币外的加密货币,旨在解决其扩展性、速度等问题。1、通过白皮书、代币模型和主网情况判断技术价值;2、评估团队背景、代码更新与社区活跃度以识别项目可信度;3、分析链上地址增长、持币分布与交易量,避免操纵风险;4、考察实际产品、合作伙伴及应用场景,优选集成于DeFi或支付系统的实用型项目。 山…

    2025年12月9日
    000
  • Cosmos Hub有什么用?Cosmos Hub是什么?

    Cosmos Hub是Cosmos网络的核心枢纽,通过IBC协议实现跨链通信与价值转移。1、作为首个区块链,连接各Zone并以ATOM代币支持治理、质押与交易。2、IBC协议确保跨链数据包经加密验证,在独立链间安全传输。3、Cosmos SDK支持模块化建链,ABCI接口分离应用与共识层,提升灵活性…

    2025年12月9日
    000
  • 以太坊合约AI预测工具有哪些?以太坊合约AI预测工具APP大全

    以太坊合约AI预测工具通过集成人工智能技术,帮助用户分析链上数据与市场趋势。一、CryptoEye提供实时价格预测与交互式分析,用户可下载App后选择ETH页面,启用AI模块并提问获取即时解析,订阅服务解锁完整功能。二、币安智能分析系统结合AI算法扫描ETH合约交易行为,登录APP后进入ETH合约区…

    2025年12月9日
    000
  • Chainlink(LINK)历年价格数据一览 LINK币历史走势图2025预测

    Chainlink(LINK)2023年初从$6.95震荡上行,12月达$14.40;2024年2月升至$15.40;2025年11月在$13至$17波动,市值约119.4亿美元,历史最高价$52.96。 Chainlink(LINK)作为预言机领域的领先项目,其价格波动受到市场广泛关注。本文梳理其…

    2025年12月9日
    000
  • 区块链与加密货币哪个更具潜力?区块链与加密货币详细解析

    区块链技术具有广泛的应用潜力,涵盖供应链、医疗、数字身份等领域,其去中心化与不可篡改特性提升数据透明与安全;加密货币作为其典型应用,以比特币、以太坊和稳定币为代表,在价值存储、去中心化金融和跨境支付中发挥重要作用;同时,区块链与AI、物联网融合,推动智能合约、跨链协议等创新模式发展,拓展了技术边界与…

    2025年12月9日
    000
  • 如何识别潜在的百倍币?加密货币早期项目研究方法

    识别潜在百倍币需系统分析项目基本面、技术实力与市场情绪。一、研读白皮书,确认项目解决现实问题,技术方案具创新性,路线图按期推进。二、评估团队背景真实性和社区活跃度,避免匿名团队与机器人刷量。三、分析代币经济模型,关注流通供应、用途功能及分配合理性,防范集中抛压。四、把握市场叙事与赛道趋势,聚焦DeF…

    2025年12月9日
    000
  • 什么是Layer 2?以太坊二层解决方案如何降低交易成本?

    Layer2通过状态通道、侧链、Rollups和Plasma提升以太坊扩展性。一、状态通道允许链下频繁交易,仅提交最终状态;二、侧链独立运行,通过桥接转移资产,降低费用;三、Rollups将交易压缩上链,分Optimistic与zk-Rollup两类;四、Plasma构建子链结构,周期提交摘要,支持…

    2025年12月9日
    000
  • 熊市生存法则: 现金为王、价值投资与学习积累,如何为下一轮牛市做准备?

    保持充足现金储备可应对风险并把握抄底机会,建议现金占比超50%、设定低位分批买入策略、预留6个月应急资金;聚焦被低估的核心资产需选择交易活跃、有应用场景和持续开发的主流币种,规避纯炒作项目;利用熊市加强学习,掌握区块链底层技术与链上分析工具,通过回测优化投资策略。 binance币安交易所 注册入口…

    2025年12月9日
    000

发表回复

登录后才能评论
关注微信