2016-09-22 188 views
-2

我寫了一個方法,該參數的類型爲TaxiShuttle。這是它的主要想法:初始化兩種類型的參數

public boolean requestPickup(Passenger passenger, Class<?> vehicleClass){ 
     Taxi taxi = scheduleTaxi(); 
     if(taxi != null) { 
      taxi.setPickupLocation(passenger.getPickupLocation()); 
      return true; 
     } 
     else { 
      return false; 
     } 
} 

有人可以請向我解釋兩種類型的參數如何初始化?

謝謝

+0

Java有沒有屬性的概念。你的意思是說嗎? –

+0

對不起,目前還不清楚你想完成什麼。請詳細解釋。 – yole

+0

'Taxi'和'Shuttle'和任何超類型之間的關係是什麼? – ChiefTwoPencils

回答

0

您可以使用像這樣的反射。

public boolean requestPickup(Passenger passenger, Class<?> vehicleClass){ 
      Object obj=Class.forName(vehicleClass.getName()).newInstance(); 

      if(obj instanceof Taxi){ 

        //do taxi login 
      }else if(obj instanceof Shuttle){ 

        //do shuttle logic 
      } 


    } 
+0

但.forName()僅適用於String類型? – jiji

+0

請找到更新 –

0

使用的界面,車輛與延伸出兩個類從它命名的出租車和班車服務。現在在你的Signature pass接口中作爲參數。那將會做的是你可以傳遞所有擴展了這個接口的對象。

public interface Vehicle { 

} 

public class Taxi implements Vehicle { 

} 

public class Shuttle implements Vehicle { 

} 

現在通過車輛接口參數

public void requestPickup(Passenger passenger, Class<? extends Vehicle > Vehicle ) { 

Vehiclec taxi = new Taxi(); 
Vehiclec shuttle = new Shuttle(); 
     ..... 

} 
+0

我不能更改方法的簽名,它在規格 – jiji

+0

使用類別車輛作爲參數,但它限制了範圍。 – Cyclotron3x3