继承Javadoc方法注释

尽管用于javadoc工具的JDK工具和实用程序页面通过实现和继承方法来描述Javadoc方法注释重用的规则,但是当实际上不需要使用{@inheritDoc}时,很容易不必要地显式描述注释继承,因为会使用相同的注释隐式继承。 Java 8 javadoc工具页面在“ 方法公共继承 ”部分描述了继承方法Javadoc注释的规则,而Java 7 javadoc工具页面在“ 方法注释的自动复制 ”部分类似地描述了这些规则。 这篇文章使用简单的代码示例来说明Javadoc方法注释继承的一些关键规则。

以下接口和类是人为设计的示例,这些示例将在本文中用于说明对方法的Javadoc注释的继承。 一些继承/实现的方法包括它们自己的Javadoc注释,这些注释会完全或部分覆盖父/接口的方法注释,而其他方法只是重用父/接口的方法的文档。

草食界面

package dustin.examples.inheritance;/*** Marks animals that eat plants.*/
public interface Herbivorous
{/*** Eat the provided plant.** @param plantToBeEaten Plant that will be eaten.*/void eat(Plant plantToBeEaten);
}

食肉接口

package dustin.examples.inheritance;/*** Marks an Animal that eats other animals.*/
public interface Carnivorous
{/*** Eat the provided animal.** @param animalBeingEaten Animal that will be eaten.*/void eat(Animal animalBeingEaten);
}

杂食性界面

package dustin.examples.inheritance;/*** Eats plants and animals.*/
public interface Omnivorous extends Carnivorous, Herbivorous
{
}

胎生接口

package dustin.examples.inheritance;/*** Mammals that give birth to young that develop within* the mother's body.*/
public interface Viviparous
{/*** Give birth to indicated number of offspring.** @param numberOfOffspring Number of offspring being born.*/void giveBirth(int numberOfOffspring);
}

动物类

package dustin.examples.inheritance;/*** Animal.*/
public abstract class Animal
{/*** Breathe.*/public void breathe(){}/*** Communicate verbally.*/public abstract void verballyCommunicate();
}

哺乳动物类

package dustin.examples.inheritance;/*** Mammal.*/
public abstract class Mammal extends Animal
{
}

哺乳类

package dustin.examples.inheritance;import java.awt.*;/*** Mammal with hair (most mammals other than dolphins and whales).*/
public abstract class MammalWithHair extends Mammal
{/** Provide mammal's hair color. */public abstract Color getHairColor();
}

狗类

package dustin.examples.inheritance;import java.awt.Color;import static java.lang.System.out;/*** Canine and man's best friend.*/
public class Dog extends MammalWithHair implements Omnivorous, Viviparous
{private final Color hairColor = null;/*** {@inheritDoc}* @param otherAnimal Tasty treat.*/@Overridepublic void eat(final Animal otherAnimal){}/*** {@inheritDoc}* @param plantToBeEaten Plant that this dog will eat.*/@Overridepublic void eat(final Plant plantToBeEaten){}/*** {@inheritDoc}* Bark.*/public void verballyCommunicate(){out.println("Woof!");}/*** {@inheritDoc}* @param numberPuppies Number of puppies being born.*/@Overridepublic void giveBirth(final int numberPuppies){}/*** Provide the color of the dog's hair.** @return Color of the dog's fur.*/@Overridepublic Color getHairColor(){return hairColor;}
}

猫类

package dustin.examples.inheritance;import java.awt.Color;import static java.lang.System.out;/*** Feline.*/
public class Cat extends MammalWithHair implements Carnivorous, Viviparous
{private final Color hairColor = null;/*** {@inheritDoc}*/@Overridepublic void eat(final Animal otherAnimal){}@Overridepublic void verballyCommunicate(){out.println("Meow");}@Overridepublic void giveBirth(int numberKittens){}@Overridepublic Color getHairColor(){return hairColor;}
}

马类

package dustin.examples.inheritance;import java.awt.Color;import static java.lang.System.out;/*** Equine.*/
public class Horse extends MammalWithHair implements Herbivorous, Viviparous
{private final Color hairColor = null;/*** @param plant Plant to be eaten by this horse.*/@Overridepublic void eat(final Plant plant){}/****/@Overridepublic void verballyCommunicate(){out.println("Neigh");}/*** @param numberColts Number of colts to be born to horse.*/@Overridepublic void giveBirth(int numberColts){}@Overridepublic Color getHairColor(){return hairColor;}
}

下一个屏幕快照显示了包的内容,其中包括上面显示了代码清单的接口和类(并非包中的所有类和接口都显示了其代码清单)。

20161116-继承包javadoc

从方法的Javadoc角度来看,这里最感兴趣的三个类是DogCatHorse类,因为它们实现了多个接口并扩展了MamalWithHair ,后者扩展了Mammal ,后者扩展了Animal

下一个屏幕快照是在Web浏览器中呈现的Animal类的Javadoc的快照。

20161119-animaljavadoc-1

Animal类不会从超类继承任何方法,也不会从接口实现任何方法,对于本博客文章的主题而言,这不是很有趣。 但是,这里显示的其他类扩展了该类,因此很有趣的是看到其方法注释如何影响继承类的方法说明。

接下来的两个屏幕快照是在Web浏览器中呈现的MammalMammalWithHair类的Javadoc的快照。 关于Mammal任何意义,没有Javadoc注释,但是对于MammalWithHair引入的新方法,只有一个方法注释。

20161119-哺乳动物javadoc

20161119-哺乳动物与毛发方法摘要

接下来的三个屏幕快照是Web浏览器中用于HerbivorousCarnivorousOmnivorous接口的Javadoc文档子集。 这些接口提供了将由实现这些方法的类继承的方法的文档。

20161119-草食性javadoc

20161119-肉食性javadoc

20161119-杂食性javadoc

使用为父类和接口显示的生成的Javadoc方法文档,现在可以查看为扩展这些类并实现这些接口的类的方法生成的文档。

前面显示的Dog类中的方法通常将{@inheritDoc}与其他文本结合使用。 从扩展类和已实现的接口继承Javadoc注释方法的结果与Dog注释中提供的附加测试相结合,显示在下一个屏幕快照中。

20161119-dogjavadoc方法摘要

20161119-狗javadocmethoddetailtop

20161119-dogjavadocmethoddetailbottom

屏幕快照的最后一组展示了Dog类的文档将其“父母”的文档与自己的特定文档混合在一起。 这不足为奇。 Dog类的方法通常从父类(基类和接口)显式继承Javadoc文档,但是Cat类除其eat方法(仅使用{@inheritDoc} )外,几乎没有对其方法的Javadoc注释。 下一个屏幕快照显示了从此类生成的Web浏览器输出。

20161119-catjavadoc方法摘要

20161119-猫javadocmethoddetail

Cat中没有应用Javadoc注释的方法会在生成的Web浏览器文档中显示,这些文档的文档是从其基类或接口继承的,而这些方法的文档包括短语“从类复制说明:”或“从接口复制说明: “ 作为适当的。 明确包含文档标记{@inheritDoc}的一个Cat方法确实复制了父方法的文档,但不包含“从...复制说明”消息。

Horse类的方法通常根本没有记录在文档中,因此它们生成的文档包括消息“从...复制说明”。 Horse类的eat()giveBirth()方法会覆盖@param部分,因此生成的Web浏览器文档中的这两个方法的参数文档(在下一组屏幕快照中显示)特定于Horse

20161119-马法摘要

20161119-马法详细

20161119-马法详细底部

从上面的代码清单和该代码生成的文档的屏幕快照,可以通过扩展和实现类来观察方法Javadoc注释的继承。 这些观察结果也在javadoc工具文档中进行了描述:

  • Javadoc注释从父类的方法和已实现的接口方法继承,或者在未指定文本时隐式继承(根本没有Javadoc或空Javadoc /** */ )。
    • javadoc文档 :“ javadoc命令允许在类和接口中继承方法注释,以填充缺少的文本或显式继承方法注释。”
  • 使用{@inheritDoc}明确指出应继承注释。
    • Javadoc文档 :“插入{@inheritDoc}的方法中的主要描述或内嵌代码@return@param ,或@throws标记注释。
  • 通过在方法注释内不同位置使用{@inheritDoc}标签,可以组合使用方法文档的隐式和显式继承。

鉴于上述观察结果,并提供了广告宣传的“ 方法注释算法 ”,从Javadoc生成HTML角度来看,编写Javadoc的一个好的经验法则是在尽可能高的级别上定义一般注释,并允许自动继承扩展类和已实现接口的方法的Javadoc文档将出现,仅添加或覆盖方法的Javadoc文本的某些部分,这些部分对于澄清或增强对低级方法的描述是必需的。 这比在继承或实现层次结构中的所有方法上复制并粘贴相同的注释,然后再将它们全部更新在一起更好。

这篇文章重点介绍了生成的Javadoc方法文档的Web浏览器演示。 幸运的是,最常用的Java IDE( NetBeans [ CTRL + hover ], IntelliJ IDEA [ CTRL + Q / 设置 ], Eclipse [ F2 / hover / Javadoc View ]和JDeveloper [ CTRL-D ])支持Javadoc的演示,遵循方法文档继承的相同规则。 这意味着Java开发人员通常可以编写较少的文档,几乎可以完全避免在继承和实现层次结构中重复文档。

翻译自: https://www.javacodegeeks.com/2016/11/inheriting-javadoc-method-comments.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/352376.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++之手写strlen函数

代码: int strlen(const char *str){ assert(str!NULL); intlen0; while((*str)!\0) len;return len; } 这个函数实现起来较为简单,注意字符指针的有效性检查。 可参考:strlen、strcpy、strcat等字符串处理函数的实现 转载于:https://www.cnb…

mysql or优化_MySQL 语句优化

官方文档放这里,有什么代码先到官方文档查询:MySQL 8.0 Reference Manual :: 8 Optimization​dev.mysql.com优化涉及多个级别的配置,调整和测量性能。 根据工作角色(开发人员,DBA或两者的组合)&#xff0c…

浅谈 MySQL 的存储引擎(表类型)

什么是MySql数据库 通常意义上,数据库也就是数据的集合,具体到计算机上数据库可以是存储器上一些文件的集合或者一些内存数据的集合。 我们通常说的MySql数据库,sql server数据库等等其实是数据库管理系统,它们可以存储数据&#…

Ubuntu如何搭建Django与Flup和Nginx环境?

Ubuntu系统越来越多的用户开始使用,本文介绍的是搭建DjangoFlupNginx环境的过程。 首先我们必须明白这这3者在该环境下发挥的作用。 1.nginx:("enginex")是一个高性能的HTTP和反向代理服务器,作用和apache的类似。它可以处理一些静…

洛谷 1137 旅行计划

【题解】 拓扑排序DP即可。 1 #include<cstdio>2 #include<cstring>3 #include<algorithm>4 #include<vector>5 #define LL long long6 #define rg register7 #define N 2000108 using namespace std;9 int n,m,front,rear,q[N],f[N],in[N]; 10 bool v…

NOT IN、JOIN、IS NULL、NOT EXISTS效率对比

语句一&#xff1a;select count(*) from A where A.a not in (select a from B) 语句二&#xff1a;select count(*) from A left join B on A.a B.a where B.a is null 语句三&#xff1a;select count(*) from A where not exists (select a from B where A.a B.a) 知道以…

python ssl_Python3 ssl模块不可用的问题

编译安装完Python3之后&#xff0c;使用pip来安装python库&#xff0c;发现了如下报错&#xff1a; $ pip install numpy pipis configured with locations that require TLS/SSL, however the ssl module in Python isnot available. Collecting numpy Retrying (Retry(total4…

shell脚本 如何切换当前目录

问题&#xff1a; 是这么个情况&#xff1a;当前目录是/root/replace/ 我想在脚本a.sh中执行该目录下的一个子目录/root/replace/scripts/下的可执行文件run.out和b.sh脚本。但是这个可执行文件run.out的文件读写要求在/scripts下&#xff0c;而b.sh脚本则是以/scripts为当前目…

使用DynamoDBMapper扫描DynamoDB项目

之前&#xff0c;我们介绍了如何使用DynamoDBMapper或底层Java api查询DynamoDB数据库。 除了发出查询之外&#xff0c;DynamoDB还提供扫描功能。 扫描的目的是获取您在DynamoDB表上可能拥有的所有项目。 因此&#xff0c;扫描不需要任何基于我们的分区键或您的全局/本地二级…

vs python生成exe文件_使用VScode编写python程序并打包成.exe文件-文件夹变成exe

1. 下载vscode并安装 2. 配置Python环境 点击左下角的吃了图标&#xff0c;在弹出的菜单中选择extensions&#xff0c;在左上方搜索框内输入“Python”&#xff0c;可以看到好多Python插件&#xff0c;选择安装喜欢的Python插件&#xff08;配图两张&#xff09;。安装Python插…

如何清除主板CMOS

最近很多网友反映&#xff0c;对于清除主板CMOS&#xff0c;不是很了解&#xff0c;操作上也不明白&#xff0c;因此网站重新制作主板CMOS清除的过程&#xff0c;并以图文的形式制作&#xff0c;以便更加直观清楚。 CMOS(本意是指互补金属氧化物半导体存储嚣&#xff0c;是一…

ubuntu如何安装samba

1.samba安装sudo apt-get install samba2.修改smb.confsudo gedit /etc/samba/smb.conf 文件最后增加如下代码&#xff1a;[share] path /home/liunx/share available yes browseable yes public yes writable yes 4.进入home/liunx目录创建share文件夹mkdir /share …

文本处理工具AWK详解

awk简介 awk: 中文意思是报告生成器 能够根据我们输入的信息&#xff0c;将信息格式化以后显示&#xff0c;将定义好的信息以比较美观&#xff08;直观&#xff09;的方式显示出来出现比较早&#xff0c;继而出现了new awk&#xff08;nawk&#xff09;在windows上实现&#x…

安装12G内存读出内存条为3.45G的处理方法

在台式电脑上安装2个内存条&#xff0c;之前是4G的后来加安装了8G内存&#xff0c;本应该有12G但是在电脑上却显示只有3.45G内存为可用&#xff0c; 以下是处理方式&#xff1a; 1、确定两条内存都是可以用 2、在cmd 中输入msconfig 点击enter就可以入系统配置 然后点击引导…

顺序表的介绍与简单运用

1&#xff1a;解释与结构 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构&#xff0c;一般情况下采用数组存 储。在数组上完成数据的增删查改。 顺序表一般可分为一下几类 1.1 静态顺序表 概念&#xff1a;使用定长数组存储元素。注意&#xff1a;这种是…

Fastest way to duplicate mongodb collection

db.myoriginal.aggregate([ { $out: "myCopy" } ]) db.runCommand({aggregate: "myOriginal",pipeline: [{ $match: {} }, { $out: "myCopy" }]});转载于:https://www.cnblogs.com/kevin1988/p/9877551.html

电脑显示链接网络正常但是不能上网,用某些软件会提示系统丢失libeay32.dll

电脑显示链接网络正常但是不能上网&#xff0c;用某些软件会提示系统丢失libeay32.dll,且可以ping通网关 按如下步骤可以重新正常上网&#xff1a; 1.在“开始”菜单找到“运行“ 2.然后在里面输入cmd 按”Enter“键 3.出现的命令提示框内输入“netsh winsock reset"按…

python做算法题优势_Python语言在科学算法中的优势

2019 年第 4 期 信息与电脑 China Computer & Communication 算法语言 Python 语言在科学算法中的优势 刘 瑞 &#xff08;辽宁师范大学海华学院&#xff0c;辽宁 沈阳 110000&#xff09; 摘 要&#xff1a; Python 是一种很有吸引力的语言&#xff0c;是一种面向对象且呈…

Java Spring IOC用法

Java Spring IOC用法 Spring IoC 转载于&#xff1a;http://www.cnblogs.com/flowwind/p/4772375.html在前两篇文章中&#xff0c;我们讲了java web环境搭建 和java web项目搭建,现在看下spring ioc在java中的运用&#xff0c;开发工具为Intellij Idea。 1.简介 IoC(Inversi…

Database学习 - mysql数据类型

MySQL数据类型 可以被分为3类&#xff1a; 1.整型,数值类型 2.日期和时间类型 3.字符串(字符)类型 整型(INT) 数据类型大小M(默认值)范围&#xff08;有符号&#xff09;范围&#xff08;无符号&#xff09;用途tinyint [(M)] [UNSIGNED] [ZEROFILL]1字节4-128~127 (-27~27-1)…