Java 反射类.forName()查找类<;类名>$1及<;类名>$2、它们是什么?
碰巧我使用反射来解码一些用户字符串条目,在某些情况下可能是一个简单的整数(0-9),而在其他情况下,它可能是对另一个类方法的调用 检查字符串inputJava 反射类.forName()查找类<;类名>$1及<;类名>$2、它们是什么?,java,reflection,Java,Reflection,碰巧我使用反射来解码一些用户字符串条目,在某些情况下可能是一个简单的整数(0-9),而在其他情况下,它可能是对另一个类方法的调用 检查字符串inputuserInput以查看是否存在具有该名称的类时: Class<?> c = Class.forName(this.getClass().getName() + "$" + userInput); Class c=Class.forName(this.getClass().getName()+“$”+用户输入); 令我惊讶的是,当用
userInput
以查看是否存在具有该名称的类时:
Class<?> c = Class.forName(this.getClass().getName() + "$" + userInput);
Class c=Class.forName(this.getClass().getName()+“$”+用户输入);
令我惊讶的是,当用户输入“1”或“2”时,forName()确实找到了一个具有该名称的类。这可能是基本Java,所以请原谅我问:这些类是什么?
我使用调试器跟踪代码并检查其他数字,似乎只定义了1和2。这些是匿名内部类。例如:
public class Foo {
public static void bar() {
Runnable runnable = new Runnable() {
@Override public void run() {}
};
}
}
这将创建一个类Foo$1
,该类实现Runnable
,它们是匿名内部类
如果.java
文件具有内部/嵌套类,则编译后编译器会将这些类生成为类$xxx.class
文件
有关更多信息,请参阅:
内部类定义生成其他类文件。这些类
文件具有组合内部和外部类名的名称,例如
MyClass$MyInnerClass.class
编译器对内部类使用美元符号
$
符号表示内部类。如果它在$
之后有一个数字,那么它是一个注释性的内部类。如果它在$
之后有一个名称,那么它只是一个内部类