繁体   English   中英

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

[英]Why is this possible in Java: this.getClass().getClass().getClass()…etc

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

this.getClass().getClass().getClass().getClass()...

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

只是好奇。

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

Class对象仍然是一个对象,你可以在任何对象上调用getClass ,这要归功于Object#getClass的存在。 所以你得到:

this.getClass(); // Class<YourClass>
this.getClass().getClass(); // Class<Class<YourClass>>
this.getClass().getClass().getClass(); //Class<Class<Class<YourClass>>>

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

每个类都扩展了Object类。 Class是一个类本身,它继承了getClass()方法。 允许您调用Class#getClass().getClass()等。

这不是递归。

递归是一个方法在最终返回之前调用自身(松散地定义)有限次数的地方。

例如:

public int sumUpTo(int i) {
    if (i == 1) {
        return 1;
    } else {
        return i + sumUpTo(i-1);
    }
}

你所做的是调用一个方法来获取这个对象的类,然后获取类的类( java.lang.Class )并重复它,只要你愿意输入。

public final Class<? extends Object> getClass()

getClass()返回一个Class对象。 由于Class是Object的衍生物,因此它也有一个getClass方法。 你应该打印几次迭代。 在第一次通话后你应该注意到一个重复的模式......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM