【问题标题】:JavaDoc method signature indentationJavaDoc 方法签名缩进
【发布时间】:2023-03-11 16:49:01
【问题描述】:

我倾向于在我的代码中使用大量换行符来保持大部分内容在 80 个字符的行宽内。虽然有些人可能会觉得这完全没用,但我喜欢在垂直旋转的屏幕上编辑代码,并且在做差异时也喜欢这种狭窄的布局。不管偏好如何,这在生成 JavaDoc 时确实给了我一个意想不到的结果,更具体地说是方法签名。

假设我有以下内容:

public static 
        <C extends AcmeConstants, 
        B extends AcmeBundle<C>, 
        R extends AcmeBundleProvider<C, B>> //Type params
        R //Return type
        newInstance(final Class<R> spiClass, final String implementationClassName) 
        throws AcmeException {

    return newInstance(spiClass, 
                       implementationClassName, 
                       Thread.currentThread().getContextClassLoader());
}

除了疯狂的类型参数,你可以看到我正在调整类型参数、返回类型、方法声明和 throws 子句,以使事情有些不同。同样,您可能会发现这很迷人或完全迟钝,但在生成 JavaDoc 时会出现问题。我得到的是文档,其中方法参数每个都在一个新行上并对齐,即使我没有这样做。不是一个真正的问题,虽然奇怪的是它把类型参数声明变成了一行。然而,真正的问题在于,它会将 throws 子句也放在新行上,并带有原始缩进!

看看我的意思:

public static <C extends AcmeConstants,B extends AcmeBundle<C>,R extends AcmeBundleProvider<C,B>> R newInstance(Class<R> spiClass,
                                                                                                                 String implementationClassName)
                                                               throws AcmeException

这与生成的 JavaDoc 中看起来完全一样。有没有办法让它停止这样做并规范化空白或其他东西?现在我必须在更改代码格式或使用奇怪的 JavaDoc 之间做出选择。

顺便说一下,我是用 Maven JavaDoc 插件生成的,但是使用不同的方法时结果是一样的。

【问题讨论】:

  • 我相信您可以编辑 javadoc 创建的页面将使用的 css。这可能会给你一些你想要的东西。但老实说?我会不理它的。虽然它可能会打扰你,但它是一种事实上的标准。把你的强迫症放在一边,专注于完成真正的工作。 (我总是与自己斗争,所以我知道你来自哪里。)
  • @Marvo 哈哈,这是强迫症好吧 :D 可能花费太多时间格式化代码。至少我已经停止在多行异常抛出中分解字符串文字。关于CSS,恐怕在这里无济于事。生成的 HTML 使用了 PRE 标记,该标记导致所有空白都完全按照文件中的内容显示。
  • 是的,Javadoc 中长类型参数声明的处理并不是最佳的。不过,与您的源代码格式无关(正如jackrabbit所说)。

标签: java newline javadoc indentation code-formatting


【解决方案1】:

Javadoc 是由Doclet 生成的,它只能看到您的代码的解析版本。它将 throws 子句与您的原始来源类似地对齐是巧合。您看到的签名实际上是从框架交给 Doclet 的MethodDoc 生成的。如果不更改 Doclet 代码,则无法更改输出格式。没有什么能阻止你对它进行后期处理,但我怀疑这是否值得。

顺便说一句,互联网上的替代 doclet 是 available,可能更适合自定义。

【讨论】:

  • 确实,刚刚尝试过,代码与输出格式无关。从一开始这似乎是有道理的,但这是一个巧合,以至于我没有看到它。生成的格式看起来如此奇怪,这真的很奇怪,在查看 JavaDocs 之前从未真正注意到这一点。感谢您的澄清!由于除了自定义之外没有什么可做的,我就让它保持原样。
猜你喜欢
  • 2012-02-06
  • 1970-01-01
  • 2020-01-20
  • 2015-02-15
  • 2010-09-20
  • 2015-10-09
  • 1970-01-01
  • 2011-03-11
  • 1970-01-01
相关资源
最近更新 更多