MyType#myMethod()中"#"的含义是什么,与"."的区别是什么.在MyType.myMethod()中

min*_*ins 3 java syntax vocabulary

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

我知道这两种形式都引用了这种方法,但我没有看到是什么#增加了另一种形式.

ski*_*iwi 10

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

class Animal {
    void fly() { 
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Animal animal = new Animal();
animal.fly();
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

Runnable animalFly = Animal::fly;
Run Code Online (Sandbox Code Playgroud)

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


Sot*_*lis 6

哈希字符(#)不是Java语言的一部分.

它在javadoc中有特殊用途.该规范状态

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

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

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