有没有办法访问编译器';Java中使用反射的匿名类的编号?
假设我有一个类对象,它代表一个匿名的内部类。有什么方法可以得到它创建的类的编译器编号吗?例如,我这里有一个类,它的编译产生了有没有办法访问编译器';Java中使用反射的匿名类的编号?,java,reflection,Java,Reflection,假设我有一个类对象,它代表一个匿名的内部类。有什么方法可以得到它创建的类的编译器编号吗?例如,我这里有一个类,它的编译产生了 Thing$1.class 正在创建的文件。如何从类对象中找到这个数字?您可以获取类的名称(“Thing$1”),找到最后一个$sign,然后解析后面的文本 String name = clazz.getName(); int number = Integer.parseInt(name.substring(name.lastIndexOf('$') + 1)); 这
Thing$1.class
正在创建的文件。如何从类对象中找到这个数字?您可以获取类的名称(“Thing$1”),找到最后一个$sign,然后解析后面的文本
String name = clazz.getName();
int number = Integer.parseInt(name.substring(name.lastIndexOf('$') + 1));
这是一个非常复杂的问题,但是我会想象你处于一个非常特殊的环境中,想要知道这类事情。你可以取类的名称(“thing$1”),找到最后一个$sign,然后解析后面的文本
String name = clazz.getName();
int number = Integer.parseInt(name.substring(name.lastIndexOf('$') + 1));
这是一个非常复杂的问题,但我会想象你处于一个非常特殊的环境中,想知道这类事情。这是有效的:
Object o =new Object(){};
String name = o.getClass().getName();
int number = Integer.parseInt(name.substring(name.lastIndexOf('$')+1));
不过,我无法想象你能用这个数字做什么有用的事情。更重要的是,这种匿名类的命名方案并不受语言或VM规范的约束。这是一个可能会改变的实施细节。这样做:
Object o =new Object(){};
String name = o.getClass().getName();
int number = Integer.parseInt(name.substring(name.lastIndexOf('$')+1));
不过,我无法想象你能用这个数字做什么有用的事情。更重要的是,这种匿名类的命名方案并不受语言或VM规范的约束。这是一个可能会更改的实现细节。只需从匿名类中执行getClass()。只需从匿名类中执行getClass()。我知道您想从正在运行的类引用中知道编号(或资源URL),不是吗 也许您可以使用
Class.getName()
或者您可以获取包含类(
class.getDeclaringClass()
),并在其贴花类中查找您的类:class.getDeclaredClasses()
。这将为您提供声明类中的位置,您可以知道哪个编号将被分配。我知道您想从运行类引用中知道编号(或资源URL),不是吗
也许您可以使用Class.getName()
或者您可以获取包含类(
class.getDeclaringClass()
),并在其贴花类中查找您的类:class.getDeclaredClasses()
。这将为您提供声明类中的位置,您可以知道哪个数字将被分配。为什么需要它?内部类不能在没有父类的情况下使用为什么需要它?内部类在没有父类1.5/JLS第三版收紧的情况下不能使用。我记不清限制是什么,也不明白为什么有人想知道。1.5/JLS第三版收紧了限制。我记不清约束是什么,也不明白为什么有人想知道。