当前位置: 首页 > news >正文

java18学习笔记-JavaDoc的@snippet注释标签

416:Reimplement Core Reflection with Method Handles

java18为JavaDoc的标准文档引入@snippet标签,以简化在API文档中包含示例源代码的过程。

一下文档详细的介绍了JavaDoc的各个标签的作用,引入版本,代码示例和展示

JavaDoc的其他标签

JDK 1.0引入JavaDoc并同时引入下面标签

@author‌ - 标识作者信息
‌@version‌ - 版本号说明
‌@param‌ - 方法参数描述
‌@return‌ - 返回值说明
‌@see‌ - 相关引用链接
‌@deprecated‌ - 标记已废弃API
‌@exception/@throws‌ - 异常说明(1.2后推荐@throws)

代码示例
import java.io.IOException;
public class JavaDocTest {/*** 测试1.0加入的JavaDoc标签* @see java.lang.Object#toString()* @version V1.0* @author 张先生* @param args 参数* @return 返回值* @deprecated* @throws IOException*/public  String test1(String... args)   throws IOException {System.out.println("Hello World!");return "";}public JavaDocTest() {}
}
展示


JDK 1.1新增

‌@since - 引入版本

代码示例
    /**** @since djk1.0*/public  String test2(String... args)  {System.out.println("Hello World!");return "";}
展示

JDK 1.2新增

‌{@link}‌ - 内联式引用链接
‌@serial‌ - 序列化字段说明
‌@serialData‌ - 序列化数据规范

‌{@link}‌和@see功能类似,{@link}可以放在文档中间而@see只能作为开头使用

代码示例
    /*** 哈哈哈,请看方法{@link java.lang.Object#toString()}*/public  String test3(String... args)  {System.out.println("Hello World!");return "";}
展示

JDK 1.3新增

‌{@docRoot}‌ (1.3) - 文档根路径引用

标注文档引用路径。<a href="{@docRoot}/../specs/serialization/protocol.html#stream-elements">显示的文字</a> 需要配合a标签使用

(但是测试的时候并不能引用到文档而且,也没有地址错误检查,@link和@see有)

代码示例

选自java18中  String的chars()方法

    /*** Returns a stream of {@code int} zero-extending the {@code char} values* from this sequence.  Any char which maps to a <a* href="{@docRoot}/java.base/java/lang/Character.html#unicode">surrogate code* point</a> is passed through uninterpreted.** @return an IntStream of char values from this sequence* @since 9*/@Overridepublic IntStream chars() {return StreamSupport.intStream(isLatin1() ? new StringLatin1.CharsSpliterator(value, Spliterator.IMMUTABLE): new StringUTF16.CharsSpliterator(value, Spliterator.IMMUTABLE),false);}
展示

JDK 1.4新增

‌{@inheritDoc}‌ (1.4) - 继承父类注释
‌{@linkplain}‌ (1.4) - 带纯文本的链接
‌{@value}‌ (1.4) - 常量值引用

@inheritDoc 可以继承父类注释,自己写的优先级更高
‌@linkplain 在java18测试下和@link并无差异
‌@value可以引入静态字段{@value #静态字段名}

代码示例

为了方便直接类implements CharSequence然后实现方法

并加入了静态变量string

    private static final  String string="HaHaHaHaHaHa";/*** 自己写的优先级更高哦* 纯文本的链接linkplain{@linkplain java.lang.Object#toString() 显示的文本 }* 链接link{@link java.lang.Object#toString() 显示的文本}** 测试@value {@value #string}.** @inheritDoc* @return 返回固定0*/@Overridepublic int length() {return 0;}
展示

JDK 1.5新增

‌{@code}‌ - 代码片段标记
‌{@literal}‌ - 原样文本输出

@code以代码片段展示,更友好的查看代码在java18中加入了@snippet,更好的处理
@literal以原文本展示,不会解析html标签等

代码示例
 /*** 以代码形式展示{@code CODE}* <a href="{@docRoot} ">点击这里</a>* {@literal <a href="{@docRoot} ">点击这里</a> }** @param args* @return*/public String test5(String... args) {System.out.println("Hello World!");return "";}
展示

JDK 8新增

‌@apiNote‌ - API使用说明
‌@implSpec‌ - 实现规范说明
‌@implNote‌ - 实现细节备注

@apiNote‌ - 一般在jdk提供的Util里面会有使用说明,例如Arrays.compare(T[] a, T[] b)使用说明必须传入非空元素或引用
‌@implSpec‌ - 一般是能够继承或实现的方法上备注,例如CharSequence.isEmpty()方法说明了默认实现
‌@implNote‌ - 一般写在继承的某个方法上,对比与父类的一些改变等,例如List中的sort(Comparator<? super E> c)方法

代码示例
        List<String> list1 = Arrays.asList(strings1);list1.sort(String::compareTo);
展示

    @snippet标签

    相当于扩展了@code

    属性

    • class— 包含代码片段内容的类 
    • file— 包含代码片段内容的文件
    • id— 代码段的标识符,用于标识生成的文档中的代码段
    • lang— 代码段的语言或格式
    • region- 要显示的内容中区域的名称
      • start— 标记区域的开始

        • region— 区域名称
      • end- 标记区域的终点

        • region— 地区名称;对于匿名区域可以省略
    • highlight- 突出显示行或区域内的文本

      • substring- 要突出显示的文字文本
      • regex-要突出显示的文本的正则表达式
      • region- 用于定义查找要突出显示的文本的范围的区域
      • type- 突出显示的类型,例如 、 或bold italichig hlighted(默认)
    • replace- 替换行或区域内的文本

      • substring— 要替换的文字文本
      • regex— 要替换的文本的正则表达式
      • region- 用于定义查找要突出显示的文本的范围的区域
      • replacement— 替换文本
    • link- 链接行或区域内的文本

      • substring— 要替换的文字文本
      • regex— 要替换的文本的正则表达式
      • region- 用于定义查找要突出显示的文本的范围的区域
      • target— 链接的目标,以适合 {@link ...} 标签的形式之一表示
      • type— 链接类型:link(默认) linkplain

    highlight replace link

    代码示例
    /*** A simple program.* {@snippet :* test6 {*     System.out.println("Hello World!");      // @highlight substring="println"*     System.out.println("Hello World!");      // @highlight substring="println"  type = "highlighted"*     System.out.println("Hello World!");      // @highlight substring="println"  type = "bold"*     System.out.println("Hello World!");      // @highlight substring="println"  type = "italic"*     System.out.println("94123");                         // @highlight regex="[0-9]+"*     for (var arg : args) {                    // @highlight region regex = "\barg\b"*        if (!arg.isBlank()) {*            System.out.println(arg);*        }*     }                                         // @end*     System.out.println("Hello World!");      // @replace regex='".*"' replacement="..."*     System.out.println("Hello World!");      // @replace substring ='System' replacement="..."*     System.out.println("94123");                         // @replace regex="[0-9]+" replacement="xxx"*     for (var arg : args) {                 // @replace region regex = "\barg\b" replacement="..."*         if (!arg.isBlank()) {*             System.out.println(arg);*         }*     }*     System.out.println("Hello World!");      // @link  regex='".*"' target="System#out"*     System.out.println("Hello World!");      // @link  substring="System.out" target="System#out"*     System.out.println("94123");             // @link  regex="[0-9]+" target="System#out"*     for (var arg : args) {                 // @link  region regex = "\barg\b" target="System#out"*         if (!arg.isBlank()) {*             System.out.println(arg);*         }*     }* }* }*/public String test6(String... args) {System.out.println("Hello World!");return "";}
    展示

    file

    代码示例

    创建文件夹snippet-files(file和class默认的路径会带上这个,class有个问题是此目录下的创建class会报错,复制进去class文件直接报错)创建文件config.properties

    文件中写入

    // @start region="example" id="111"
    demo.serialnumber=61E3F9C4A2E5D296DE76463E9AB23372CA0EB28DE249F3CA9881C401BFD1710C
    //@end
            JavaDocTest javaDocTest = new JavaDocTest();
    
    展示

    http://www.dtcms.com/a/344815.html

    相关文章:

  1. 数据结构 -- 队列
  2. 【运维自动化-标准运维】变量的高级用法
  3. 去中心化的私有货币与中心化的法定货币的对比分析
  4. 数据结构与算法-算法-283移动零
  5. 深度分析AI边缘盒子在电力行业的应用与发展
  6. 【LeetCode】22. 括号生成
  7. 欲打造未来感十足的规划馆,应优先引入哪些沉浸式多媒体技术?
  8. Spring Start Here 读书笔记:第9章 Using the Spring web scopes
  9. 人脸识别驱动的工厂人体属性检测与预警机制
  10. C#开源库ACadSharp读取dwg图元的示例
  11. 为何她在“传递情报”时会被干扰?—— 探究 TCP 协议在无线环境中的信号干扰问题
  12. 算法题复盘+代码解读(2)—— 两数之和
  13. 【功能测试面试题】
  14. 【数据结构】B+ 树——高度近似于菌丝网络——详细解说与其 C 代码实现
  15. CVPR焦点 | 神经网络新范式:轻量化与精度并行,重塑视觉任务性能天花板
  16. 解释一下,Linux,shell,Vmware,Ubuntu,以及Linux命令和shell命令的区别
  17. 1337俚语的由来
  18. Seaborn数据可视化实战:Seaborn时间序列可视化入门
  19. Linux学习-网络编程2
  20. .java->.class->java 虚拟机中运行
  21. 51.Seata-TCC模式
  22. 前端函数防抖
  23. Nginx + Keepalived 实现高可用负载均衡集群
  24. 前端桌面端解决方案技术选型:全面指南
  25. 深入理解强化学习的target network
  26. 3.5MM防水耳机插座
  27. 为什么访问HTTPS站点时,会发生SSL证书错误
  28. JAVA基础代码示例
  29. SpringBoot -- 集成Spring Security (二)
  30. LightGBM时序预测详解:从原理到 PSO 参数优化