1

これは変数名の有効な部分であることに気付きましたが、変数名が実際に記号$を使用するのを見たことがありません。

Javaチュートリアルはこれを言います:

さらに、慣例により、ドル記号文字はまったく使用されません。自動生成された名前にドル記号が含まれる場合がありますが、変数名では常にドル記号を使用しないでください。

ただし、これはJavaの初心者を対象としているため、分散型の世界では、$は特別な意味で存続するのではないかと思います。

4

5 に答える 5

3

私が今まで見たのはこれだけです

  • $生成されたプロキシクラスで、メソッド、変数、クラス名で頻繁に使用されます
  • $内側->外側のクラスの合成アクセサーメソッド。メソッド名にもaを使用していると思います。
  • 内部クラス名(JVMから見た場合)

しかし、ソースコードで使用されているのを見たことがないので、そうする理由は考えられません。これ$は、生成されたコードのほぼ決定的な指標です。

于 2010-01-01T00:54:43.087 に答える
2

ただし、これはJavaの初心者を対象としているため、分散型の世界では、$は特別な意味で存続するのではないかと思います。

人間が書いたコードの識別子に「$」を使用しないというチュートリアルのアドバイスは、すべての人に向けられています。

確かに、JLSはほぼ同じことを言っており、そのドキュメントは初心者を対象としていないことは間違いありません。

" Java文字には、大文字と小文字のASCIIラテン文字、、、およびA-Z歴史a-z的な理由から、ASCIIアンダースコア(_)とドル記号($)が含まれます。この$文字は、機械的に生成されたソースコードでのみ使用するか、まれにpre-にア​​クセスするために使用する必要があります。レガシーシステム上の既存の名前 "- JLS3.8

'$'識別子が有効であるが推奨されない理由は、コンパイラとコードジェネレータに通常の識別子名前空間への「プライベート」拡張を提供するためです。ジェネレータが識別子を合成する必要がある場合、識別子に「$」を含めることは、既存の(または将来の)人間が作成した識別子と衝突してはならないことを意味します。

'$'が使用できない場合、ジェネレーターは、合成された各識別子が識別子の衝突を引き起こさないことを確認する必要があります。そうしないと、コンパイルされないJavaコードが生成されるリスクがあります。これは、生成されたコードにプログラマーが提供するJavaコードが含まれている場合は困難であり、生成されたコードが実行時にジェネレーターで使用できない任意のクラスで動作する必要がある場合は不可能になる可能性があります。

'$'がジェネレーターによって実際にどの程度使用されているかはわかりませんが、Javaコンパイラーが、ネストされた匿名の内部クラスの名前、および(私が思うに)関連する隠れた変数にそれらを使用していることは知っています。したがって、このアドバイスに注意を払う必要があります。

于 2010-01-01T02:53:03.360 に答える
0

私はそれが意図的に一度だけ使用されたのを見たことがあります、そしてそれは次のようなもののためでしたBigInteger $33 = BigInteger.valueOf(33L);

変に見えます。

于 2010-01-01T00:53:53.320 に答える
0

または内部クラス。

いいえ、変数名には使用しません。RMIについても、そのような選択を正当化する特別なことは何もありません。

于 2010-01-01T00:58:38.570 に答える
0

変数の命名に「$」を多用する実際の(おそらく)人間が書いたコードを見たい場合は、PacketWorld(マルチエージェントシステムのシミュレーションツール)を見ることができます。

私はそれを使い始めたばかりで、「なぜJavaでドルを使うのか」というグーグル検索の後にここに送られました。

それでも意味がありません:(

于 2011-05-26T10:42:42.477 に答える