【发布时间】:2014-08-12 20:11:46
【问题描述】:
好吧,一切都在标题中......
我知道这两个表单都引用了方法,但是我看不到 # 向另一个表单添加了什么。
【问题讨论】:
-
前者是Javadoc格式,如果没记错的话。我试图用它来表示“
MyType中定义的方法”,而点更多地用于实际的方法调用,但我不确定“真正”的含义是什么。
标签: java syntax vocabulary
好吧,一切都在标题中......
我知道这两个表单都引用了方法,但是我看不到 # 向另一个表单添加了什么。
【问题讨论】:
MyType中定义的方法”,而点更多地用于实际的方法调用,但我不确定“真正”的含义是什么。
标签: java syntax vocabulary
井号 (#) 不是 Java 语言的一部分。
它在 javadoc 中有一个特殊的用途。 specification 状态
package.class#member 是任何有效的程序元素名称 引用——包、类、接口、构造函数、方法或 字段名——除了成员名前面的字符 应该是一个井号字符 (#)。
和
如上所述,井号 (#),而不是点 (.) 分隔 来自其类的成员。 这使 Javadoc 工具能够解析 歧义,因为点还分隔类、嵌套类、 包和子包。但是,Javadoc 工具一般是 宽松的,如果你知道没有,会正确解析一个点 模棱两可,虽然它会打印一个警告。
符号不仅适用于方法,它适用于任何类型的成员。它有助于消除完全限定类型名称的歧义。
【讨论】:
static 和非静态方法,因此以这种方式区分它们并不是什么大问题。
. 版本是 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 早了很长时间。
【讨论】:
# 仅用于文档吗?您是说它用于表示 instance 方法吗?为什么要提出方法引用?
fly() 是Animal 类的静态方法,那么我们还是在javadoc 中将它表示为Animal#fly()?
MyType#myMethod() 是JavaDoc 的语法,因此您的文档可以链接到不同方法的文档。
例如,Object.equals() 的 javadoc 包含链接到 Object.hashCode() 方法的文本,因为它们是相关的。
/**
* ...
*
* @see Object#hashCode()
*/
public boolean equals(Object obj)
其中 MyType.myMethod() 是 Java 代码中用于调用方法的实际语法中的 syntx。
【讨论】: