为什么在Java中这是可能的:this.getClass().getClass().getClass()....等

Ale*_*lls 6 java class

为什么这在Java中是可能的:

this.getClass().getClass().getClass().getClass()...
Run Code Online (Sandbox Code Playgroud)

为什么会有这种无限递归?

只是好奇.

das*_*ght 10

这里没有无限递归:getClass()返回一个java.lang.Class对象,它本身就是一个java.lang.Object对象,因此它支持getClass()方法.在第二次打电话给getClass()你后,无论你打多少次,都会得到相同的结果getClass().

  • @StephenC实际上这里的限制不是方法可以包含的字节码的最大长度(64kb iirc)?编辑:是的,这里(4.9.1):http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.9 (3认同)

ζ--*_*ζ-- 4

对象Class仍然是对象,并且getClass由于 的​​存在,您可以调用任何对象Object#getClass。所以你得到:

this.getClass(); // Class<YourClass>
this.getClass().getClass(); // Class<Class<YourClass>>
this.getClass().getClass().getClass(); //Class<Class<Class<YourClass>>>
Run Code Online (Sandbox Code Playgroud)

最终,对于如此庞大的程序,您将耗尽堆栈内存、时间或磁盘空间,或者达到 Java 内部限制。

  • 您将递归与恒等运算混淆了。 (2认同)