我看了這迄今已公佈,但找不到滿意的答案卻把所有的答案工作的罰款。回答這種檢查有沒有類似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
描述 - :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)
會告訴對象是否只是一個類的實例。
霍普(父&子類將根本不會被考慮的)這有助於http://www.java-samples.com/showtutorial.php?tutorialid=332你可以用'qux的instanceof Foo' – DaGLiMiOuX
@Selvin使用instanceof並不一定意味着應用程序設計是錯誤的。例如,當您嘗試將數據映射到多個視圖類型時,它在適配器中使用。 –
但檢查對象是Foo的實例,但不是Bar(當Bar擴展Foo時)是錯誤的應用程序設計 – Selvin