4

好吧,一切都在标题中...

我知道这两种形式都指的是方法,但我看不到#另一种形式的增加。

4

3 回答 3

7

井号 (#) 不是 Java 语言的一部分。

它在 javadoc 中有一个特殊的用途。规范指出_

package.class#member是任何被引用的有效程序元素名称——包、类、接口、构造函数、方法或字段名称——除了成员名称前面的字符应该是哈希字符 (#)。

如前所述,哈希字符 (#),而不是点 (.) 将成员与其类分开。这使 Javadoc 工具能够解决歧义,因为点还分隔类、嵌套类、包和子包。但是,Javadoc 工具通常是宽松的,如果您知道没有歧义,它会正确解析一个点,尽管它会打印一个警告。

该符号不仅适用于方法,还适用于任何类型成员。它有助于消除完全限定类型名称的歧义。

于 2014-06-22T19:48:08.357 回答
6

.版本是 Java 编程语言中使用的正式符号,更具体地说,考虑以下代码:

class Animal {
    void fly() { 
    }
}

使用该方法fly()我们需要执行以下操作:

Animal animal = new Animal();
animal.fly();

然而,我们真正想要在文档中说明的是实例方法 fly()的调用,因此我们表示Animal#fly(),一个看似替代的方法是Animal.fly(),但这将表示Java 代码中类的静态方法。Animal

因此Animal#fly(),它被用于所有其他形式,总而言之,替代方案将是:

  • Animal.fly(),但是这可能意味着静态方法。
  • animal.fly(), 但是没有类叫做animal.

作为旁注,值得注意的是,从 Java 8 开始,我们实际上可以直接在 Java 代码中执行这些操作,方法是:

Runnable animalFly = Animal::fly;

这里我们也引用了该Animal#fly()方法,但是 javadoc 比 Java 8 早了很长时间。

于 2014-06-22T19:43:40.687 回答
1

MyType#myMethod()是一种语法,JavaDoc以便您的文档可以链接到不同方法的文档。

例如 Object.equals() 的 javadoc 包含链接到 Object.hashCode() 方法的文本,因为它们是相关的。

/**
 * ...
 *
 * @see Object#hashCode()
 */
  public boolean equals(Object obj)

其中 MyType.myMethod() 是 Java 代码中用于调用方法的实际语法中的 syntx。

于 2014-06-22T19:47:42.800 回答