我试图在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()
}
}
。有没有不同的方法来实现这一目标?
答案 0 :(得分:1)
错误非常自我解释。您正在尝试返回WebOrderStatusUpdater,但您声明要返回T。
当我致电
时会发生什么class SomeOtherSubtype() extends PlatformOrderUpdater
PlatformUpdaterFactory.apply[SomeOtherSubtype]("example")
根据类型签名,返回类型应为SomeOtherSubtype
,但您的方法始终返回WebOrderStatusUpdater。
解决方案是删除类型参数,因为在该示例中它不会为您执行任何操作。
def apply(platformId: String): PlatformOrderUpdater = {
new WebOrderStatusUpdater()
}