3

偶然、リフレクションを使用してユーザー文字列エントリをデコードしています。これは、単純な整数の数字 (0 ~ 9) である場合もあれば、別のクラス メソッドへの呼び出しである場合もあります。

文字列入力userInputをチェックして、その名前のクラスが存在するかどうかを確認します。

Class<?> c = Class.forName(this.getClass().getName() + "$" + userInput);

驚いたことに、ユーザーが「1」または「2」と入力Class.forName()すると、実際にその名前のクラスが見つかります。これはおそらく基本的な Java です。デバッガーでコードを追跡し、他の番号を確認しましたが、1 と 2 のみが定義されているようです。

4

3 に答える 3

6

それらは匿名の内部クラスです。

.javaファイルに内部/ネストされたクラスがある場合は、コンパイル後にそれらがコンパイラによってファイルとして生成されますTheClass$xxx.class

詳細については、次のリンクを参照してください。

内部クラス定義は、追加のクラス ファイルを生成します。これらのクラス ファイルには、MyClass$MyInnerClass.class のように、内部クラス名と外部クラス名を組み合わせた名前が付いています。

于 2013-06-11T16:15:52.637 に答える
6

これらは匿名の内部クラスです。例えば:

public class Foo {
    public static void bar() {
        Runnable runnable = new Runnable() {
            @Override public void run() {}
        };
    }
}

Foo$1これにより、を実装するクラスが作成されRunnableます。

于 2013-06-11T16:15:24.103 に答える