定义Web服务接口(继承/重载)的最佳/标准方法是什么?

| 定义Web服务接口的最佳/标准方法是什么? 例如, 我有两个班级的汽车和公共汽车,它们都扩展了车辆。 如果要公开Car和Bus的create方法,则可以使用以下选项- public void create(车辆v); public void create(String type,Vehicle v); public void create(Car c);和public void create(Bus b); 公共无效createCar(Vehicle v);和public void createBus(Vehicle v); 公共无效createCar(Car c);和public void createBus(Bus b); 编辑 - - - - - - - - - - - - - - - - - 我主要关心的是以上5个选项,这是Web服务API的标准方法。 Java编码的标准可能不是Web服务的标准。     
已邀请:
        如果您对标准方式感兴趣,那么这些都不是。 Web服务不支持操作重载,并且在WS BP Profile中被禁止 WS BP
4.5.3 Distinctive Operations

Operation name overloading in a wsdl:portType is disallowed by the Profile. 
这实际上是有道理的,因为消息模式(doc / lit)期望将操作名称作为消息有效负载的根进行分配。 此外,您在谈论的是OO概念,但Web服务标准是一种集成技术(不绑定到特定的语言或平台)。 无论如何,如果您希望这样做,可以在注释中通过tweeking来实现重载,恕我直言,我认为最好的选择是
2
,以便消费者知道如何向下转换。     
        第一个似乎是您可以使用的最通用的类​​,您只需在
Car
Bus
类中覆盖它即可     
        首先,您的方法称为
create
,因此按惯例应该是一种工厂方法,因此应返回Vehicle的实例。您的方法看起来更像
init
,因为它们收到了Vehicle,Car,Bus的实例。 因此,我建议您修改签名,例如
Vehicle create(*some arguments*)
现在介绍the型。我建议您使用基于泛型的定义,例如
<V extends Vehicle> V create()
可以在不强制转换为特定Vehicle子类的情况下调用此方法。 关于争论。我相信你可以使用 字符串类型(根据您的建议) 班级类型 定义特殊的枚举车辆{Car,Bus,Bike}并使用它。 另外,您也可以(按照您的建议)为每种车辆类型(例如
createCar
createBus
)创建几种工厂方法,但是我不喜欢这种方法,因为每次添加新类型的车辆时,都必须添加这种方法。     

要回复问题请先登录注册