如何在Java中获取对象类?

时间:2012-07-18 13:51:44

标签: java performance class comparison

获取实例类的最佳方法是什么?

推荐的方式是什么?以下是什么区别(表现):

  • 比较班级

if( this.getClass().equals(MyClass.class) ){ 这似乎与this.getClass() == MyClass.class相同(或者可能使用Class.forName("com.test.MyClass")

  • 测试的实例(似乎更具可读性)

    if( this instanceof MyClass ){
    
  • 使用类

    测试实例
    if( MyClass.class.isInstance(myInst) ){
    

2 个答案:

答案 0 :(得分:2)

当你想要完全匹配一个类时,我会推荐this.getClass().equals( MyClass.class)因为"someString" instanceOf Object将产生true,因为String类是Object的子类型。

这是检查任何实例和类之间的is a关系。

在您的情况下,MyClass的任何子类都会生成true

  1. instanceof测试左边的东西是右边的类型还是某个子类型的实例。
  2. getClass() == ...测试类型是否相同。

答案 1 :(得分:1)

选项一只会告诉您该类是否与您正在测试的完全相同。这通常不是很有用。例如,接口完全没有意义。如果这实际上是你想要做的,你可以使用==,除非你搞乱了不同的ClassLoader,在这种情况下,每个Class可能有多个实例。对象。

选项二告诉您对象是否可以静态分配给给定的类(即可以转换为它)。

选项3与两个相同,但使用reflection API。如果你正在进行动态打字,你只需要这个。内置的instanceof更具可读性,效率更高。