在Java中,假设我们有一个名为Foo的类,obj.getClass()。getName()和Foo.class.getName()如何获取相同的结果?

时间:2015-04-03 10:56:05

标签: java class object

假设我有一个名为Foo的类的实例abc。当我调用abc.getClass()。getName()时,我相信我实际上正在调用Class“<”Foo“>”。getName()。所以,我的问题是它与Foo.class.getName()的相同之处是什么? Foo.class.getName()是本机实现吗?

2 个答案:

答案 0 :(得分:2)

Foo.classClass<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.