【问题标题】:Initialize arguments of two types初始化两种类型的参数
【发布时间】:2017-01-30 15:03:43
【问题描述】:

我编写了一个方法,它接受Taxitype 或Shuttle 类型的参数。这是它的主要思想:

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

有人可以向我解释一下如何初始化两种类型的参数吗?

谢谢

【问题讨论】:

  • Java 没有属性的概念。你是说争论吗?
  • 抱歉,您完全不清楚您要完成什么。请详细说明。
  • Taxi 和 Shuttle 与任何超类型有什么关系?
  • 对不起@sharonbn 我犯了一个错误我更正了它
  • 您想了解哪些细节? @yole

标签: java arguments parameter-passing


【解决方案1】:

你可以像这样使用反射。

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
           }


    }

【讨论】:

  • 但是 .forName() 只适用于 String 类型?
【解决方案2】:

使用接口 Vehicle 并从中扩展两个名为 Taxi 和班车的类。现在在您的签名传递接口中作为参数。这样做是您可以传递所有扩展该接口的对象。

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 ();
       .....

}

【讨论】:

  • 我无法更改方法的签名,它在规范中
  • 使用类 > 车辆作为参数,但它限制了范围。
猜你喜欢
  • 2021-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-04
  • 2019-03-16
  • 2016-09-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多