Java 8中不完整的Javadoc?

Incomplete Javadoc in Java 8?

javadocs for Java is the 8不完全?P></

方法对omitted are some of the method and the description is copied from a(incorrectly)基础类(例如toString()java.util.intsummarystatistics the method with the笔记"description copied from class对象"。P></

1
public String toString()

Description copied from class: Object

Returns a string representation of the object. In
general, the toString method returns a string that
"textually represents" this object. The result should be a concise
but informative representation that is easy for a person to read. It
is recommended that all subclasses override this method.

The toString method for class Object returns a
string consisting of the name of the class of which the object is an
instance, the at-sign character '@', and the unsigned
hexadecimal representation of the hash code of the object. In other
words, this method returns a string equal to the value of:

1
getClass().getName() + '@' + Integer.toHexString(hashCode())

Overrides:

toString in class Object

Returns:

a string representation of the object.

the actual toString方法特异性信息:返回舱这样P></

1
IntSummaryStatistics{count=10, sum=129, min=2, average=12.900000, max=29}

默认的类和对象inherited not the from here,as shown。P></


是的,这里有几个不同的问题。

IntSummaryStatistics.toString规范有一些文本是从Object.toString复制过来的,它会覆盖这些文本。第一部分是正确的:

Returns a string representation of the object. In general, the toString method returns a string that"textually represents" this object. The result should be a concise but informative representation that is easy for a person to read. It is recommended that all subclasses override this method.

这表示Object.toString定义的合同,并对所有子类施加要求。

Object.toString复制的规范的第二部分是:

The toString method for class Object returns a string consisting of the name of the class of which the object is an instance, the at-sign character '@', and the unsigned hexadecimal representation of the hash code of the object. In other words, this method returns a string equal to the value of:

getClass().getName() + '@' + Integer.toHexString(hashCode())

这是正确的,但不相关,因为它在IntSummaryStatistics.toString的规范中讨论了Object.toString的实现。把这个复制到这里是不合适的。注意,这是关于Object.toString的实施,而不是关于需要实施覆盖的合同。

问题是,在IntSummaryStatistics.toString的文档注释中使用的javadoc {@inheritDoc}指令复制了整个内容,而实际上只需要复制部分内容。具体来说,应复制对子类施加的合同,但不应复制实施规范。

直到JDK8没有办法将它们分开,所以文本要么是手工复制(导致不一致),要么是使用{@inheritDoc},复制不需要的内容。在JDK8中,引入了一些新的javadoc标记,如@implSpec(实现规范),将文档注释分为不同的部分。{@inheritDoc}指令可以选择性地继承这些部分,而不是继承整个文档。不幸的是,这些标签在本例中没有使用,所以我们有一些清理工作要做。

新的标签记录在这个信息性的jep中。注意,这些标签是JDK特有的,还不能用于JDK之外的JavaDoc。

还有一件丢失了。Object.toStringdoc注释在概念上分为一部分定义子类上的合同和一部分定义其实现。理想情况下,我们希望将合同部分复制到IntSummaryStatistics.toString文档中,并希望有另一部分定义IntSummaryStatistics.toString的实现。原来有,但看不见!IntSummaryStatistics.toString的源代码将其作为文档注释:

1
2
3
4
5
6
7
8
9
@Override
/**
 * {@inheritDoc}
 *
 * Returns a non-empty string representation of this object suitable for
 * debugging. The exact presentation format is unspecified and may vary
 * between implementations and versions.
 */

public String toString() { ...

不幸的是,文本"返回非空字符串表示…"没有出现在JavaDoc输出中。我觉得这是另一个错误。编辑:错误是注释在@Override注释和方法声明的其余部分之间。文档注释必须位于整个方法声明之前,包括注释。所以这个注释看起来像一个Doc注释,但是由于它位于错误的位置,JavaDoc忽略了它。

我已经提交了JDK-80449和JDK-8080450来涵盖这些问题。


我想说你是对的,这里有什么问题。此toString()方法记录在InSummaryStatistics JavaDoc页上。它没有在"从类对象派生的方法"链接中引用。所以我想说,如果这个方法的行为与object.toString()不同,那么应该记录该行为。


我不同意称这是"错误的"。但它误导了类Object是如何实现toString()的,因为实际上实现与此不同。

我认为这部分不应该被复制。这是误导性的,并没有添加可利用的信息。

但我完全同意这种形式的文档有点"不正确",对于这样的公共API来说是不值得的。即使没有任何文档比这个文档更好。