我有一系列 Car、Bicycle 和 Van 類的物件。我想遍歷所有物件并執行該go()方法。go()一類看起來像這樣。
public class Van extends Vehicle {
@Override
public void go() {
System.out.println("Van started");
}
}
這些類中的每一個都繼承了 Vehicle 類。因此,當我初始化一個 type 陣列時Vehicle[],它可以正常作業。
現在我想對陣列做同樣的事情Object[]。但由于物件的型別不同,我收到一個錯誤,要求將 x 轉換為相關資料型別(在本例中為 Car、Van 或 Bicycle)。我嘗試使用,x.getClass()但它給了我作為汽車類、自行車類等的答案。當我嘗試執行go()方法時,我收到一條錯誤訊息The method go() is undefined for the type Class<capture#3-of ? extends Object>
public class App {
public static void main(String[] args) throws Exception {
Car car = new Car();
Bicycle bicycle = new Bicycle();
Van van = new Van();
Object[] racers = {car, bicycle, van};
for(Object x : racers) {
System.out.println(x.getClass());
x.getClass().go(); // error - The method go() is undefined for the type Class<capture#3-of ? extends Object>
}
}
}
uj5u.com熱心網友回復:
找到了答案
public class App {
public static void main(String[] args) throws Exception {
Car car = new Car();
Bicycle bicycle = new Bicycle();
Van van = new Van();
Object[] racers = {car, bicycle, van};
for(Object x : racers) {
System.out.println(x.getClass());
((Vehicle) x).go(); // this is the only change I made
}
}
}
uj5u.com熱心網友回復:
以下將有效
Vehicle[] racers = {car, bicycle, van};
for (Vehicle x : racers) { ... x.go();
動態檢測也確實有效。您可以使用現代的Stream<?>.
Object[] racers = {car, bicycle, van};
Arrays.stream(racers)
.filter(r -> r instanceOf(Vehicle)
.map(Vehicle.class::cast)
.forEach(r -> {
r.go(); ...
};
uj5u.com熱心網友回復:
您必須使用“instanceof”關鍵字
Object o = "testString";
if (o instanceof Integer) {
System.out.println("is Integer");
return
}
if (o instanceof String) {
System.out.println("is String");
return;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/482999.html
下一篇:陣列中不包括指定鍵的多個值
