这是JavaDoc的内容:
public final Class <?> getClass()
返回此
Object
的运行时类。返回的Class
对象是由所代表类的static synchronized
方法锁定的对象。
实际结果类型为Class<? extends |X|>
,其中|X|
是调用getClass
的表达式的静态类型的擦除。例如,在此代码片段中不需要进行强制转换:
Number n = 0; Class<? extends Number> c = n.getClass();
返回值:
表示此对象的运行时类的Class对象。现在,我明白它是一个本地方法,因此它是在平台相关的代码中实现的。但是这个方法的返回类型是什么呢?
public final Class<?> getClass()
此外,请考虑以下代码:
class Dog { @Override public String toString() { return "cat"; } } public class Main { public static void main(String[] args) { Dog d= new Dog(); //Class<Dog> dd = new Dog(); Compile time error System.out.println(d.getClass()); } }
输出:
class Dog
因此,我的疑问在于:
- 这种方法的返回类型是什么
- toString方法没有被调用。有一个类似主题的帖子: Java. getClass()返回一个类,为什么我也可以得到一个字符串?
- 被注释的代码会导致编译时错误。
Class
是一种真正有效的Object
类型。可以查看关于Class
的Java文档。注释代码会出错,因为Class<Dog>
应该设置为一个Class
对象,而new Dog()
返回一个Dog
对象。 - CollinDObject
都有一个引用指向表示其类的Class
,而getClass()
只是一个普通的getter。 - Kevin Krumwiedepublic final native Class<?> getClass();
。由于对象的表示是实现的问题,访问此实现定义的数据结构的代码最好是“native”的。必须在不需要本地化和必须本地化之间有一个限制。(另请参见:巴伯的悖论) - laune