我偶然使用反射来解码一些用户字符串条目,在某些情况下可以是简单的整数位(0-9),有时它可以是对另一个类方法的调用.
检查字符串输入userInput以查看是否存在具有该名称的类:
Class<?> c = Class.forName(this.getClass().getName() + "$" + userInput);
Run Code Online (Sandbox Code Playgroud)
令我惊讶的是,当用户输入"1"或"2"时,Class.forName()确实找到了具有该名称的类.这可能是基本的Java,所以请原谅我:这些类是什么?我使用调试器跟踪代码并检查其他数字,似乎只定义了1和2.
那些是匿名的内部类.例如:
public class Foo {
public static void bar() {
Runnable runnable = new Runnable() {
@Override public void run() {}
};
}
}
Run Code Online (Sandbox Code Playgroud)
这将创建一个Foo$1实现的类Runnable.