Java修炼终极指南:37. 在Java API文档中添加代码片段

我相信你对为你的项目生成Java API文档(Javadoc)非常熟悉。我们可以通过命令行使用Javadoc工具、通过IDE支持、通过Maven插件(maven-javadoc-plugin)等方式来生成Javadoc。

在编写Javadoc时,一个常见的情况是添加代码片段来举例说明非平凡类或方法的使用。在JDK 18之前,可以通过`{@code…}`或`<pre>`标签在文档中添加代码片段。添加的代码被视为纯文本,不会进行正确性验证,也无法被其他工具发现。让我们快速举一个例子:

/** * 一个带有激光测距功能的测距仪,测距范围从0到60英尺, * 包括高精度计算表面积和体积 * * <pre>{@code * Telemeter.Calibrate.at(0.00001); * Telemeter telemeter = new Telemeter(0.15, 2, "IP54"); * }</pre> */ public class Telemeter { // ... }

在捆绑的代码中,你可以看到完整的示例。Javadoc是通过maven插件(maven-javadoc-plugin)在构建时生成的,所以只需触发构建即可。

从JDK 18开始,JEP 413 – Java API文档中的代码片段,我们通过全新的`{@snippet…}`标签支持在文档中添加代码片段。通过`@snippet`添加的代码可以被第三方工具发现和验证(但不是javadoc工具本身)。

例如,之前的代码片段可以通过`@snippet`添加如下:

/** * 一个带有激光测距功能的测距仪,测距范围从0到60英尺, * 包括高精度计算表面积和体积 * * {@snippet : * Telemeter.Calibrate.at(0.00001); * Telemeter telemeter = new Telemeter(0.15, 2, "IP54"); * } */ public class Telemeter { // ... }

输出的截图如下所示:

Java修炼终极指南:37. 在Java API文档中添加代码片段

图2.13 – 来自`@snippet`的简单输出

有效的代码从分号(:)后面的换行符开始,并在关闭右大括号(})之前结束。代码的缩进与代码块中的缩进相同,因此编译器会移除偶然的空白字符,我们可以根据关闭右大括号(})来缩进代码。请查看以下图表:

Java修炼终极指南:37. 在Java API文档中添加代码片段

图2.14 – 代码片段的缩进

在上面的例子中,关闭右大括号与打开左大括号对齐,而在下面的例子中,我们将关闭右大括号向右移动了。

**添加属性**

我们可以通过名称=值对为`@snippet`指定属性。例如,我们可以通过`lang`属性为代码片段提供编程语言提示。属性的值可供外部工具使用,并出现在生成的HTML中。以下是两个例子:

* {@snippet lang="java" : * Telemeter.Calibrate.at(0.00001); * Telemeter telemeter = new Telemeter(0.15, 2, "IP54"); * }

在生成的HTML中,你将很容易识别到这个属性作为`<code class="language-java"> … </code>`。

如果代码是结构化文本,如属性文件,则可以遵循以下示例:

* {@snippet lang="properties" : * telemeter.precision.default=42 * telemeter.clazz.default=2 * }

在生成的HTML中,你将得到`<code class="language-properties"></code>`。

接下来,让我们看看如何更改代码片段中显示的内容。

**使用标记注释和区域**

我们可以通过标记注释来可视化地更改代码片段。标记注释出现在行尾,并包含一个或多个标记标签,形式为`@name args`,其中args通常是name=value对。常见的标记注释包括高亮显示、链接和内容(文本)修改。

**高亮显示**

可以通过不带参数的`@highlight`来高亮显示整行代码,如下图所示:

Java修炼终极指南:37. 在Java API文档中添加代码片段

图2.15 – 高亮显示整行代码

如你在此图中看到的,第一行代码被加粗了。如果我们想高亮显示多行代码,则可以定义区域。一个区域可以被视为匿名的或具有显式名称。匿名区域由标记标签的参数中的单词region界定,并在区域末尾放置`@end`标签。以下是一个高亮显示两个区域(一个匿名的和一个名为R1的)的示例:

Java修炼终极指南:37. 在Java API文档中添加代码片段

图2.16 -使用区域高亮显示代码块

正则表达式允许我们高亮显示代码的特定部分。例如,高亮显示引号之间的所有内容可以通过`@highlight regex='".*"'`来实现。或者,仅高亮显示单词Calibrate可以通过substring="Calibrate"参数来实现,如下图所示:

Java修炼终极指南:37. 在Java API文档中添加代码片段

图2.17 – 仅高亮显示单词"Calibrate"

接下来,让我们谈谈在代码中添加链接。

**链接**

可以通过`@link`标签在代码中添加链接。常见的参数是substring="…"和target="…"。例如,以下代码片段为文本Calibrate提供了一个链接,该链接导航到Calibrate.at()方法的描述:

Java修炼终极指南:37. 在Java API文档中添加代码片段

图2.18 – 在代码中添加链接

接下来,让我们看看如何修改代码的文本。

**修改代码的文本**

有时我们可能需要更改代码的文本。例如,我们想在文档中渲染`Telemeter.Calibrate.at(eps, "HIGH");`而不是`Telemeter.Calibrate.at(0.00001, "HIGH");`。因此,我们需要将0.00001替换为eps。这正是`@replace`标签的用途所在。常见参数包括substring="…"(或regex="…")和replacement="…"。以下是代码片段:

Java修炼终极指南:37. 在Java API文档中添加代码片段

图2.19 – 替换代码的文本

如果你需要在代码块中执行多个替换,则依赖于区域。在以下示例中,我们对代码块应用了一个简单的正则表达式:

Java修炼终极指南:37. 在Java API文档中添加代码片段

图2.20 – 通过简单正则表达式和匿名区域应用多个替换

如果你需要在同一行上执行更多替换,只需链式使用多个`@replace`标签(此语句适用于所有标签,如`@highlight`、`@link`等)。

**使用外部片段**

到目前为止,我们只使用了内联片段。但是,有些情况下使用内联片段不是一个方便的方法(例如,如果我们需要重复文档中的某些部分)或无法使用它们(例如,如果我们要嵌入/*…*/注释,这些注释无法添加到内联片段中)。

对于这些情况,我们可以使用外部片段。无需任何进一步配置,JDK自动识别放置在包含片段标签的包(文件夹)的子文件夹中的外部片段。这个子文件夹应命名为snippet-files,并且可以包含作为Java源代码、纯文本文件或属性文件的外部片段。在以下图表中,我们有一个名为MainSnippet.txt的单个外部文件:

Java修炼终极指南:37. 在Java API文档中添加代码片段

图2.21 – snippet-files中的外部片段

如果外部片段不是Java文件,则可以通过`{@snippet file …}`加载,如下所示:

{@snippet file = MainSnippet.txt} {@snippet file = "MainSnippet.txt"} {@snippet file = 'MainSnippet.txt'}

但是,我们还可以自定义外部片段的位置和文件夹名称。例如,让我们将外部片段放置在名为snippet-src的文件夹中,如下所示:

Java修炼终极指南:37. 在Java API文档中添加代码片段

图2.22 – 自定义文件夹和位置中的外部片段

这次,我们需要指示编译器在哪里找到外部片段。这是通过向javadoc传递`–snippet-path`选项来完成的。当然,你可以通过命令行、IDE或maven-javadoc-plugin来传递它,如下所示:

<additionalJOption> --snippet-path C:...srcsnippet-src </additionalJOption>

这个路径相对于你的机器,所以请根据你的pom.xml文件相应地调整它。接下来,可以像之前对MainSnippet.txt所做的那样加载AtSnippet.txt和ParamDefaultSnippet.properties。但是,加载Java源代码,如DistanceSnippet.java,可以通过`{@snippet class…}`来完成,如下所示:

{@snippet class = DistanceSnippet} {@snippet class = "DistanceSnippet"} {@snippet class = 'DistanceSnippet'}

但是,不要明确添加.java扩展名,因为你会得到一个错误,指出在源代码路径或片段路径上找不到文件:DistanceSnippet/java.java。

**外部片段中的区域**

外部片段通过`@start region=…`和`@end region=…`支持区域。例如,在AtSnippet.txt中,我们有以下区域:

// 这是文档中使用的示例 // @start region=only-code Telemeter.Calibrate.at(0.00001, "HIGH"); // @end region=only-code

现在,如果我们按如下方式加载区域:

{@snippet file = AtSnippet.txt region=only-code}

我们只会得到区域中的代码,而不会得到文本`// 这是文档中使用的示例`。以下是另一个带有两个区域的属性文件的示例:

# @start region=dist sc=[0,0] ec=[0,0] interpolation=false # @end region=dist # @start region=at eps=0.1 type=null # @end region=at

dist区域用于在文档中显示distance()方法参数的默认值:

Java修炼终极指南:37. 在Java API文档中添加代码片段

图2.23 – 使用dist区域展示了distance()方法参数的默认值

而at区域则用于在文档中显示at()方法参数的默认值:

Java修炼终极指南:37. 在Java API文档中添加代码片段

图2.24 – 使用'at'区域展示了at()方法参数的默认值

在外部片段中,我们可以使用与内联片段中相同的标签。例如,在以下图表中,你可以看到AtSnippet.txt的完整源代码:

Java修炼终极指南:37. 在Java API文档中添加代码片段

图2.25 – AtSnippet.txt的源代码

请注意@highlight和@replace的存在。

从JDK 19开始,Javadoc的搜索功能也得到了改进。换句话说,JDK 19 可以生成一个独立的搜索页面,用于在Javadoc API文档中搜索。此外,搜索语法也得到了增强,以支持多个搜索词。

你可以在捆绑的代码中练习这些示例。通过添加适当的代码片段和标记,你可以为你的Java API文档提供更加丰富和有用的内容,帮助读者更好地理解和使用你的代码库。

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

(0)
上一篇 2024年7月8日 下午3:04
下一篇 2024年7月8日 下午3:16

相关推荐

  • 杭州项目审批管理系统

    杭州项目审批管理系统 随着城市化进程的不断加快,杭州的项目审批管理也变得越来越复杂。传统的审批流程不仅效率低下,还容易出现审批延误、审批不公等问题。为了解决这些问题,杭州的项目审批…

    科研百科 2天前
    0
  • 系统集成项目管理 考试

    系统集成项目管理考试(IPMP)是项目管理领域的重要考试之一,旨在测试考生对系统集成项目管理的掌握程度。作为一个专业的项目经理,掌握系统集成项目管理的知识是非常重要的。本文将介绍I…

    科研百科 2024年12月12日
    0
  • 抓党建带队建促审判 让法徽在党旗下闪耀——新时代人民法院党建工作大家谈

    近日,习近平总书记对党的建设和组织工作作出重要指示强调,深刻领会党中央关于党的建设的重要思想,不断提高组织工作质量。近年来,全国各级法院按照“抓党建带队建促审判”的工作思路,大力加…

    科研百科 2023年9月14日
    154
  • 如何开发微信小程序公众号(如何开发微信小程序公众号)

    随着时间的流逝,随着互联网的飞速发展,微信越来越成为我们生活中的一部分,微信小程序公众号也成为了许多公司的标配,与此同时,许多公司也趁机抓住机会,成为了第三方开发公司,但价格却各不…

    科研百科 2023年4月4日
    153
  • 河南省高校人文社会科学研究一般项目

    河南省高校人文社会科学研究一般项目 摘要: 河南省高校人文社会科学研究一般项目是一项旨在推动河南省高校人文社会科学研究的项目,旨在加强河南省高校人文社会科学研究的学术氛围和学术实力…

    科研百科 2024年11月9日
    2
  • 办公协同软件排行(办公协同软件产业)

    办公协同软件产业: 推动企业数字化的利器 随着数字化时代的到来,企业数字化已经成为不可避免的趋势。办公协同软件作为企业数字化的重要组成部分,已经成为现代办公的必备工具。本文将探讨办…

    科研百科 2024年6月3日
    35
  • 项目管理系统ui设计

    项目管理系统UI设计 随着现代企业的快速发展,项目管理系统已经成为了现代企业管理中不可或缺的一部分。一个好的项目管理系统可以提高项目管理的效率和精度,从而促进企业的快速发展。因此,…

    科研百科 2024年7月15日
    28
  • 计算机大学生科研项目方向计算机大学生科研项目方向

    计算机大学生科研项目方向 随着计算机技术的不断发展,计算机大学生的科研项目方向也越来越多样化。在这个项目方向上,计算机大学生可以探索各种前沿的技术和研究方向,如人工智能、机器学习、…

    科研百科 2024年9月4日
    27
  • 智能化项目管理系统有哪些(智能化项目管理系统)

    智能化项目管理系统智能化项目管理系统(智能化)是一款团队管理功能,主要的功能就是“规划”。从技术、服务、管理等各个方面可以推出解决问题,而对于部分从事工程管理和管理的企业来说,需要…

    科研百科 2024年7月29日
    29
  • 项目管理常见的工具

    项目管理是组织中至关重要的一环,决定了项目的进度,质量和成本。为了满足这些要求,项目经理需要使用一些常见的工具来管理项目。在本文中,我们将介绍一些项目管理中常用的工具。 第一个工具…

    科研百科 2024年5月26日
    57