Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法访问编译器';Java中使用反射的匿名类的编号?_Java_Reflection - Fatal编程技术网

有没有办法访问编译器';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第三版收紧了限制。我记不清约束是什么,也不明白为什么有人想知道。