50470


次の①のWebページでは、クラスとメソッドとの区切れをString.substring()のように「.」で表しています。  
次の②のWebページでは、クラスとメソッドとの区切れをjava.lang.String#substringのように「#」で表しています。

①のように「.」で表すのは、ソースと同様にということだと思います。  
②のように、ソース以外の文章の中で、クラスとメソッドとの区切れを「#」で表す由来は、何でしょうか。

① [Javaの部分文字列取得の基本「String.substring()」を覚えよう!](https://engineer-club.jp/java-
substring)  
②
[java.lang.String#substringの心配事を調べた](https://qiita.com/j_catfish/items/bcfd437e8dda72b558bd)


CC BY-SA 4.0
2018-11-19T13:40:09.670
50448
2018-11-20T11:43:54.413
19705
question
java
説明文中にクラスとメソッドとの区切れを「#」で示すときの「#」の由来


Javadocの@seeや@linkタグの記法から来ていると思われます。

<https://docs.oracle.com/javase/jp/8/docs/technotes/tools/windows/javadoc.html>

> {@link package.class#member label}



> @see reference  
>  記法3 @see package.class#member labelという形式は、表示テキストlabelを持つリンクを挿入します。

それで、javadocがなぜ`#`を採用したのかを想像すると、

  * `.` を採用すると、'java.lang.String.substring' のようにメソッド名を含むケースと 'java.lang.String' のようにクラス名で終わるケースの区別が簡単ではない。

  * メソッドへのリンクは、Javadocで生成されるHTMLでは `http://.../java/lang/String.html#substring(int)` というURI参照になるので、それに合わせて `#` にした。

といったところでしょうか。


CC BY-SA 4.0
2018-11-19T14:11:01.617
50449
2018-11-20T02:26:15.580
2018-11-20T02:26:15.580
3475
3475
50448
answer


`String.substring()`
と書くとスタティックメソッドであるかのように見えるので、それを避けるため別の記号が用いられるようになったのだと思います。  
(別の記号として`#`が用いられるのは、[int32_tさんの回答](https://ja.stackoverflow.com/a/50449/2808)の通りJavadocコメントで馴染みがあったから、でしょうか(参考
[1](https://stackoverflow.com/q/24354882/4506703),[2](https://softwareengineering.stackexchange.com/q/304400/255395)))

> ①のように「.」で表すのは、ソースと同様にということだと思います。

と書かれていますが、インスタンスメソッドである`substring`が実際にその形でソースコード中に表れることはありません。

他方、スタティックメソッドは`String.valueOf()`のように`.`が用いられることが多いように思われます。`#`区切りの表現はあまり見かけません。


CC BY-SA 4.0
2018-11-20T11:43:54.413
50470
2018-11-20T11:43:54.413
2808
50448
answer