switch分で唐突に$と[]が出てきたのですが、このような形は初めて見ました。
これはどういう意味でしょうか。
普通ならパッケージは.でつなぎます。
また、()の後に[]とは?
java
1switch($SWITCH_TABLE$org$aiwolf$client$lib$Topic()[content.getTopic().ordinal()])
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答1件
0
ベストアンサー
$
識別子を構成する文字の一つです。下記の言語仕様書にあるように普通のソースコードで使う機会はまずありませんが、使おうと思えば使えます。試しに書いてみてください。コンパイルエラーにはならないことがわかります。
言語仕様書
https://docs.oracle.com/javase/specs/jls/se10/html/jls-3.html#jls-3.8
識別子に使える文字("Java letters")の説明の一節
The "Java letters" include uppercase and lowercase ASCII Latin letters A-Z (\u0041-\u005a), and a-z (\u0061-\u007a), and, for historical reasons, the ASCII dollar sign ($, or \u0024) and underscore (_, or \u005f). The dollar sign should be used only in mechanically generated source code or, rarely, to access pre-existing names on legacy systems. The underscore may be used in identifiers formed of two or more characters, but it cannot be used as a one-character identifier due to being a keyword.
(太字は回答者)
$
はJavaコンパイラーやJVM上で動く他の言語が内部的な識別子として使うことが多いと思います。例えばJavaで以下のようなソースコードを書くと構文エラーではなく意味的なエラー(クラス名が重複している)となります。
java
1class A { 2 class B { 3 } 4} 5 6class A$B { 7}
なぜこんなことが起きるかといえばAの内部クラスBのクラスファイルはA$B.class
という名前になるためだろうと思います。class A$B {...}
は文法的に正当なのですがクラスファイルの名称が衝突してしまうため都合が悪いわけですね。実際class A$C {...}
と記述するとコンパイルできてしまいます。しかし上のようなことを考えれば$
は普通は使うべきでないということが納得できるのではないでしょうか?
()の後に[]
識別子の後に括弧が続けばそれは「メソッド呼び出し」です。多分それはご存じだろうと思います。そのメソッドの戻り値が配列だったら・・・と考えてみてください。当然その後に[指標を表す式]
を続ければ配列の要素を表せます。
わかってしまえば「なぁんだ」と感じると思います。
java
1class Foo { 2 static String[] strings() { 3 return new String[] { "a", "b", "c" }; 4 } 5 6 static void bar() { 7 String s = strings()[1]; // => "b" 8 } 9}
投稿2018/10/15 18:31
編集2018/10/15 18:32総合スコア18394
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。