【问题标题】:What is the meaning of "#" in MyType#myMethod() and the difference with "." as in MyType.myMethod()MyType#myMethod() 中的“#”是什么意思,与“.”的区别是什么?如 MyType.myMethod()
【发布时间】:2014-08-12 20:11:46
【问题描述】:

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

我知道这两个表单都引用了方法,但是我看不到 # 向另一个表单添加了什么。

【问题讨论】:

  • 前者是Javadoc格式,如果没记错的话。我试图用它来表示“MyType中定义的方法”,而点更多地用于实际的方法调用,但我不确定“真正”的含义是什么。

标签: java syntax vocabulary


【解决方案1】:

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

它在 javadoc 中有一个特殊的用途。 specification 状态

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

如上所述,井号 (#),而不是点 (.) 分隔 来自其类的成员。 这使 Javadoc 工具能够解析 歧义,因为点还分隔类、嵌套类、 包和子包。但是,Javadoc 工具一般是 宽松的,如果你知道没有,会正确解析一个点 模棱两可,虽然它会打印一个警告。

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

【讨论】:

  • 谢谢。看来这个答案是一个与 Javadoc API 相关的好答案。如skiwi所说,在一般讨论中如何区分静态成员和实例成员?
  • @mins 我想你可以这样做,但我看不出有多大意义。您不能同时拥有具有相同签名的 static 和非静态方法,因此以这种方式区分它们并不是什么大问题。
【解决方案2】:

. 版本是 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 方法吗?为什么要提出方法引用?
  • 谢谢。总结一下: Animal#fly() 和 Animal.fly() 分别表示,为了在一般文档中进行区分,实例和静态调用。而且,其他发帖者提到:Javadoc 还使用 # 来消除成员名称与其限定符的歧义,但没有静态或实例含义。
  • 那么,静态方法呢?如果fly()Animal 类的静态方法,那么我们还是在javadoc 中将它表示为Animal#fly()
【解决方案3】:

MyType#myMethod()JavaDoc 的语法,因此您的文档可以链接到不同方法的文档。

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

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

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

【讨论】:

    猜你喜欢
    • 2011-04-03
    • 1970-01-01
    • 1970-01-01
    • 2011-08-12
    • 2017-06-11
    • 2018-03-05
    • 2023-03-27
    • 2010-09-29
    • 2011-04-18
    相关资源
    最近更新 更多