27

ドル記号($)は、変数に名前を付けるための有効な文字です。たとえばString superSecretFormula$;、命名規則について話している場合、この記号をいつ使用する必要がありますか?

たとえば、アンダースコアは、空白を使用できないため、主に単語を区切るために使用されます。

4

6 に答える 6

36

識別子に関するJava言語仕様から:

この$文字は、機械的に生成されたソースコードでのみ使用するか、まれに、レガシーシステムの既存の名前にアクセスするために使用する必要があります。

于 2012-12-27T15:31:06.010 に答える
15

あなたの質問はJavaのタグが付けられていますが、タイプ文字について質問しているようです。これはVisual Basicでまだサポートされていますが、最近では(または長い間)広く使用されていません。

これは少し主観的ですが、私は言うのは公正だと思います:決して

変数名の前に接頭辞を付けることできるシナリオの1つは、 jQueryオブジェクトを区別する$JavaScriptコードを作成する場合です。

編集

変数名をで開始することに関して、$OracleJavaチュートリアルでは次のように説明しています。

$変数の名前は、任意の正当な識別子にすることができます—文字、ドル記号 " "、または下線文字" "で始まるUnicode文字と数字の無制限の長さのシーケンス_。ただし、慣例では、変数名は常に「$」や「_」ではなく文字で始めます。

于 2012-12-27T15:22:31.240 に答える
14

理論的には、変数名にドル記号を使用できますが、その記号はコンパイラーによって内部的に使用されるため(内部クラスまたは匿名クラスの名前など)、強くお勧めしません。

スタックオーバーフローに関する2つの関連する質問を参照してください。変数名の$の意味は何ですか?内部クラスが存在する場合、ドル記号を含むJavaクラス名はコンパイルに失敗します

于 2012-12-27T15:28:06.643 に答える
5

名前が合成フィールドと競合しています

McDowellはJLSを引用しました。これは、合成フィールドとの名前の競合が原因でOracleJDK1.8.0_45でコンパイルできない例です。

public class Assert {
    static final boolean $assertionsDisabled = false;
    public static void main(String[] args) {
        assert System.currentTimeMillis() == 0L;
    }
}

問題は、実装javacするフィールドを生成することです。これは、フィールドと競合し、次のように言います。$assertionsDisabledassertjavac

the symbol $assertionsDisabled conflicts with a compile synthesized symbol

参照:Javaのassertキーワードは何をし、いつ使用する必要がありますか?

于 2015-07-11T08:09:22.760 に答える
2

私は、Richardが説明しているように、一般に、特殊記号$の使用は避けるべきであることに同意します。ただし、reactorプロジェクトでjQueryのようなセレクターを定義するために$を使用しているのを見たことを覚えています。注意して使用すると、$記号はJavaでいくつかの美しいAPIを定義するのに役立つと思います。

于 2015-10-07T10:49:45.880 に答える
1

Javaでは、「_」をプライベートクラス全体の非静的変数またはフィールドのプレフィックスとして使用し、「$」をプライベートクラス全体の静的変数のプレフィックスとして使用します。

読み取り行をブロックしないため、「m」プレフィックスを使用するよりも優れています。可変語を読み始めたときに、明らかに「_」や「$」を読み始めないでしょう。_addressMap$addressMapと同様ですが、Map mAddressMapのようにmを使用すると、読み始めた時点で混乱する可能性があります。

これは従来のJavaコードではありませんが、これらの変数をマークして、クラス全体かどうか、静的か非静的かをすぐに理解できるようにするのに非常に役立ちます。もちろん、これについてチームメートと直接話し合う必要があります。

于 2015-04-22T12:18:18.357 に答える