[英]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.