我偶然使用反射来解码一些用户字符串条目,在某些情况下可以是一个简单的整数(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美元。
美元符号被编译器用于内部类。
$
符号表示内部类。如果在$
之后有一个数字,那么它是一个匿名的内部类。如果它的名字在$
之后,那么它只是一个内部类