[class关键字的隐藏点

问题描述 投票:-2回答:1

实际上这是一个三部分的问题。

1我想知道我们在什么情况下使用关键字class。很明显,我们使用它来定义一个类。但是在表达式中使用SomeClass.class的目的是什么?

2我在Wikipedia上读到它可以代替表达式new SomeClass().getClass()使用。但是,当我们已经可以使用new SomeClass().getClass()表达式时,为什么需要它呢?

3何时需要在语句中使用此SomeClass.class表达式?

我指的是匿名内部类,在我看来我们不能在静态方法中使用getClass()方法。

java class
1个回答
5
投票

但是在表达式中使用SomeClass.class的目的是什么?

它称为类文字;参见JLS 15.8.2

目的是获得Class表示的类的SomeClass对象。 (但是您已经知道...)

但是当我们已经可以使用new SomeClass().getClass()表达式时为什么需要这个?

因为new SomeClass()创建了SomeClass()的新实例:

  • 这是不必要的
  • 可能很贵
  • 可能有不良副作用
  • 可能需要提供多个参数
  • 甚至可能不可能;例如如果构造函数不可访问,或者类为abstract

而且我们何时需要在语句中使用此SomeClass.class表达式?

有许多涉及反射的用例,在这些用例中,您需要Class对象用于类进行操作。首先阅读a good tutorial on Java reflection


我指的是匿名内部类

类文字不能用于获取匿名内部类的Class。但是this.getClass()可以使用。

...在我看来,我们不能在静态方法中使用getClass()方法。

嗯,我想那是您需要一个类文字的情况。

但是严格来讲,您可以以静态方法调用getClass()。问题是您不能在this上显式或隐式调用它。

© www.soinside.com 2019 - 2024. All rights reserved.