从泛型函数返回具体子类型

时间:2017-04-24 19:30:16

标签: scala

我试图在scala中实现工厂模式,并且遇到了无法从工厂对象的apply方法返回特征子类型的问题,如下所示:

 shirt_color    Location    PhoneNo
     red           NY         123
   yellow          NY         123
     red           CA         322
   yellow          CA         322

我在这里遇到的错误是trait PlatformOrderUpdater class WebOrderStatusUpdater() extends PlatformOrderUpdater object PlatformUpdaterFactory { def apply[T <: PlatformOrderUpdater](platformId: String): T = { new WebOrderStatusUpdater() } } 。有没有不同的方法来实现这一目标?

1 个答案:

答案 0 :(得分:1)

错误非常自我解释。您正在尝试返回WebOrderStatusUpdater,但您声明要返回T。

当我致电

时会发生什么
class SomeOtherSubtype() extends PlatformOrderUpdater
PlatformUpdaterFactory.apply[SomeOtherSubtype]("example")

根据类型签名,返回类型应为SomeOtherSubtype,但您的方法始终返回WebOrderStatusUpdater。

解决方案是删除类型参数,因为在该示例中它不会为您执行任何操作。

def apply(platformId: String): PlatformOrderUpdater = {
   new WebOrderStatusUpdater()
}