假设我有一个名为Foo的类的实例abc。当我调用abc.getClass()。getName()时,我相信我实际上正在调用Class“<”Foo“>”。getName()。所以,我的问题是它与Foo.class.getName()的相同之处是什么? Foo.class.getName()是本机实现吗?
答案 0 :(得分:2)
Foo.class
是Class<Foo>
类型的静态实例;运行时只有一个这样的实例。 *
如果obj
的类型为Foo
,则obj.getClass()
会根据定义返回Foo.class
。
<小时/> *如果您有多个类加载器,这可能会变得奇怪,我的知识在那时变得模糊......
答案 1 :(得分:1)
如果在getClass()
的实例上调用Foo
,则返回类型为Class<? extends Foo>
,因为实例可能是子类型的实例,例如class SubTypeOfFoo extends Foo
。
Foo instanceOfFoo = new Foo();
assertEquals(Foo.class, instanceOfFoo.getClass()); // Succeeds
instanceOfFoo = new SubTypeOfFoo();
assertEquals(Foo.class, instanceOfFoo.getClass()); // Fails.