Reflection Class.forName() 找到类 <classname>$<classname>1 和 $2,它们是什么?



我偶然使用反射来解码一些用户字符串条目,在某些情况下可以是一个简单的整数(0-9),其他时候可以是对另一个类方法的调用。

在检查字符串输入userInput时,查看是否存在同名的类:

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

,令我惊讶的是,当用户输入"1"或"2"时,Class.forName()确实找到了具有该名称的类。这可能是基本的Java,所以请原谅我的问题:这些是什么类?我用调试器跟踪代码并检查了其他数字,只有1和2似乎是定义的。

这些是匿名内部类。例如:

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

这将创建一个类Foo$1来实现Runnable

它们是匿名内部类。

如果你的.java文件有内部/嵌套类,编译后这些被编译器生成为TheClass$xxx.class文件

查看此链接获取更多信息:

内部类定义产生额外的类文件。这些类文件的名称结合了内部和外部类的名称,例如MyClass MyInnerClass.class美元。

美元符号被编译器用于内部类。

$符号表示内部类。如果在$之后有一个数字,那么它是一个匿名的内部类。如果它的名字在$之后,那么它只是一个内部类

相关内容

  • 没有找到相关文章

最新更新