【问题标题】:Java - Comparing classes?Java - 比较类?
【发布时间】:2011-09-10 05:39:26
【问题描述】:

我如何比较两个班级?

尽管 class 是 MyClass 的类型,但以下 if 语句永远不会通过:

public void(Class class) {
   if (class == MyClass.class){

   }
}

【问题讨论】:

  • 我怀疑它是否可以编译...另一方面,如果它只是伪代码,那么我看不出有什么奇怪的。你能粘贴实际的代码吗?

标签: java android class comparison


【解决方案1】:

测试clazz是否是MyClass的(子)类型

MyClass.class.isAssignableFrom(clazz)

来自Class.isAssignableFrom的javadoc

确定此 Class 对象表示的类或接口是否与指定的 Class 参数表示的类或接口相同,或者是其超类或超接口。如果是,则返回 true;否则返回false。如果此 Class 对象表示原始类型,则如果指定的 Class 参数正是此 Class 对象,则此方法返回 true;否则返回 false。

具体来说,该方法测试指定的Class参数表示的类型是否可以通过恒等转换或扩展引用转换转换为该Class对象表示的类型。有关详细信息,请参阅 Java 语言规范第 5.1.1 和 5.1.4 节。

所以

Object.class.isAssignableFrom(String.class)

是真的,因为每个String 也是一个Object 但是

String.class.isAssignableFrom(Object.class)

为假,因为并非所有Objects 都是Strings。


isAssignableFrom”这个名字来源于这样一个事实,

Class1 x = (Class2) null;

只有在

时才合法
Class1.class.isAssignableFrom(Class2.class)

即,我们可以分配静态类型为Class1的字段或变量,其值来自静态类型为Class2的表达式。

【讨论】:

    【解决方案2】:

    您可以使用instanceof 运算符来检查实例是否属于特定类或其子类。

    class MyClass{}
    
    class SubClass extends MyClass{}
    
    public static void main(String args[]) {
    
        SubClass object = new SubClass();
    
        if (object instanceof MyClass) {
            System.out.println("It works, too");
        }
    }
    

    【讨论】:

      【解决方案3】:

      您可以使用==.equals() 来比较Class 对象。

      例子:

      class MyClass
      {
          public static void main (String[] args) throws java.lang.Exception
          {
              MyClass m = new MyClass();
              if (MyClass.class == m.getClass())
              {
                  System.out.println("it worked");
              }
          }
      }
      

      演示:http://ideone.com/AwbNT

      【讨论】:

        【解决方案4】:
        if (clazz.equals(MyClass.class)) {
        
        }
        

        顺便说一句,class 是保留字。

        【讨论】:

        • klass 也是一个常见的 var 名称。
        • final Class<E> SAN_DIEGO
        猜你喜欢
        • 1970-01-01
        • 2011-09-03
        • 2011-09-18
        • 1970-01-01
        • 1970-01-01
        • 2015-10-11
        • 2021-09-06
        • 2014-03-08
        • 1970-01-01
        相关资源
        最近更新 更多