我们需要java.lang.Object中的方法getClass()吗?

Sar*_*nan 11 java oop

我知道getClass()方法java.lang.Object.但在我的申请中,我知道我的所有课程.那么,使用这种方法的实际目的是什么?

Ste*_*n C 11

但在我的申请中,我知道我的所有课程.那么,使用这种方法的实际目的是什么?

所以,如果你写这个,你还知道真正的类things[0]是什么吗?

Object[] things = new Object[]{
        "Hi mum", new Integer(42), /* and a whole bunch more */};
shuffle(things);
Run Code Online (Sandbox Code Playgroud)

从理论上讲,你可以things[0]instanceof表达式上使用长序列来解决这个问题,但这很痛苦.这解决了这个问题.

Class cls = things[0].getClass();
Run Code Online (Sandbox Code Playgroud)

现在,我会告诉你,你不经常需要这样做.但是当你这样做时,功能性Object.getClass()是必不可少的.

正如其他答案所指出的那样,该getClass()方法对于利用反射来绕过静态类型限制的应用程序非常重要.


我想,另一个问题是该Object.getClass()方法的存在是否对JVM性能有任何影响.答案是否定的.该方法仅公开必须存在的信息才能实现instanceof运营商.此信息通常由垃圾收集器使用.


ste*_*vls 6

你正在涉足美妙的反思世界.使用反射,您可以以编程方式检查类,设置其字段,调用其方法等.您可以使用它做一些非常强大的东西,以及您每天使用的大多数框架(例如Hibernate,Spring,Guice等)非常依赖它来实现目标.

  • 好的概述.但我认为重要的是,虽然*frameworks*可以用它做很棒的事情,但是经典的商业代码通常应该*避免*使用它(至少直接),因为它可以*轻松*使你的代码结构变得难以理解. (4认同)
  • 当重写equals方法时,getClass通常用在业务代码中,以检查另一个对象的类是否与该对象的类相同. (2认同)