我已经阅读了迄今为止发布的所有答案,但还没有找到满意的答案。回答是否有类似instanceof 这样的声明用于此检查?或者我应该使用qux.getClass().equals(Foo.class) 问题我会说是的,java 中有instanceof 运算符来检查对象是否是类的实例。下面是一个例子-:
class Vehicle {
}
class Car extends Vehicle {
}
public class Research {
public static void main(String[] args) {
Vehicle vehicle = new Vehicle();
if (vehicle instanceof Vehicle) {
System.out.println("vehicle instanceof Vehicle : TRUE");
} else {
System.out.println("vehicle instanceof Vehicle : FALSE");
}
if (vehicle instanceof Car) {
System.out.println("vehicle instanceof Car : TRUE");
} else {
System.out.println("vehicle instanceof Car : FALSE");
}
System.out.println();
Car car = new Car();
if (car instanceof Vehicle) {
System.out.println("car instanceof Vehicle : TRUE");
} else {
System.out.println("car instanceof Vehicle : FALSE");
}
if (car instanceof Car) {
System.out.println("car instanceof Car : TRUE");
} else {
System.out.println("car instanceof Car : FALSE");
}
}
}
输出-:
vehicle instanceof Vehicle : TRUE
vehicle instanceof Car : FALSE
car instanceof Vehicle : TRUE
car instanceof Car : TRUE
Description-:instanceof 运算符告诉对象是一个类的实例还是它的父类(直到任何级别)。
vehicle instanceof Car : FALSE 输出行表明instanceof 运算符不会判断对象是否是其子类的实例。
另一种方法是使用getClass().equals(Foo.class) 来确定对象是否是类的实例。让我们看看下面的例子-:
class Vehicle {
}
class Car extends Vehicle {
}
public class Research {
public static void main(String[] args) {
Vehicle vehicle = new Vehicle();
if (vehicle.getClass().equals(Vehicle.class)) {
System.out.println("vehicle instanceof Vehicle : TRUE");
} else {
System.out.println("vehicle instanceof Vehicle : FALSE");
}
if (vehicle.getClass().equals(Car.class)) {
System.out.println("vehicle instanceof Car : TRUE");
} else {
System.out.println("vehicle instanceof Car : FALSE");
}
System.out.println();
Car car = new Car();
if (car.getClass().equals(Vehicle.class)) {
System.out.println("car instanceof Vehicle : TRUE");
} else {
System.out.println("car instanceof Vehicle : FALSE");
}
if (car.getClass().equals(Car.class)) {
System.out.println("car instanceof Car : TRUE");
} else {
System.out.println("car instanceof Car : FALSE");
}
}
}
输出-:
vehicle instanceof Vehicle : TRUE
vehicle instanceof Car : FALSE
car instanceof Vehicle : FALSE
car instanceof Car : TRUE
说明-:从上面的例子可以清楚地看出,应该在哪里选择哪一个(以上两个)?
重要提示-:
-
instanceof 运算符不会抛出 NullPointerException 异常,以防引用变量未指向任何对象(即它具有空引用)。
-
car.getClass().equals(Car.class) 将抛出 NullPointerException 异常,以防car 未指向任何对象(即它具有空引用)。因此,必须对此进行额外的空检查,例如 car != null && car.getClass().equals(Car.class) 以防止它来自 NullPointerException。
-
instanceof 运算符判断一个对象是一个类的实例还是它的父类(直到任何级别)。
-
car.getClass().equals(Car.class) 将判断一个对象是否只是类的一个实例。 (根本不考虑父类和子类)