2016-09-22 141 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