2016-09-22 3 views
-2

Я написал метод, который принимает аргумент типа Taxi или Shuttle. Вот основная идея:Инициализировать аргументы двух типов

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

Может кто-нибудь объяснит мне, как можно инициализировать аргументы двух типов?

Thanks

+0

Java не имеет понятия атрибута. Вы имели в виду аргумент? –

+0

Извините, не совсем ясно, чего вы хотите достичь. Пожалуйста, объясните более подробно. – yole

+0

Какова связь между «Такси» и «Шаттлом» и любыми супертипами? – 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

Использовать интерфейс автомобиля и продлить два класса от него по имени Такси и челночный транспорт. Теперь в вашем интерфейсе передачи подписи в качестве параметра. Что вы сделаете, так это то, что вы можете передать все объекты, расширяющие этот интерфейс.

public interface Vehicle { 

} 

public class Taxi implements Vehicle { 

} 

public class Shuttle implements Vehicle { 

} 

Переходит интерфейс Vehicle в качестве параметра

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

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

} 
+0

Я не могу изменить подпись метода, это в спецификации – jiji

+0

использовать Класс Автомобиль как параметр, но он ограничивает область действия. – Cyclotron3x3

Смежные вопросы