在 Java 中比较类类型

2022-08-31 17:29:37

我想比较Java中的类类型。

我想我可以这样做:

class MyObject_1 {}
class MyObject_2 extends MyObject_1 {}

public boolean function(MyObject_1 obj) {
   if(obj.getClass() == MyObject_2.class) System.out.println("true");
}

我想比较一下,以防传递给函数的obj是否从MyObject_1扩展。但这行不通。看起来getClass()方法和.class给出了不同类型的信息。

如何比较两个类类型,而不必创建另一个虚拟对象来比较类类型?


答案 1

试试这个:

MyObject obj = new MyObject();
if(obj instanceof MyObject){System.out.println("true");} //true

由于继承,这对接口也是有效的:

class Animal {}
class Dog extends Animal {}    

Dog obj = new Dog();
Animal animal = new Dog();
if(obj instanceof Animal){System.out.println("true");} //true
if(animal instanceof Animal){System.out.println("true");} //true
if(animal instanceof Dog){System.out.println("true");} //true

有关实例的进一步阅读:http://mindprod.com/jgloss/instanceof.html


答案 2

如果您不想或不能使用,则与以下项进行比较:instanceofequals

 if(obj.getClass().equals(MyObject.class)) System.out.println("true");

顺便说一句 - 这很奇怪,因为语句中的两个实例确实应该是相同的,至少在您的示例代码中是这样。在以下情况下,它们可能会有所不同:Class

  • 类具有相同的短名称,但在不同的包中定义
  • 这些类具有相同的全名,但由不同的类装入器装入。