【发布时间】:2020-11-25 08:10:23
【问题描述】:
我将工厂模式与泛型一起使用。这个想法是根据 A 的类型创建正确的实现(BlockType1Impl 或 BlockType2Impl),这是一个案例类(BlockchainType1 或 BlockchainType2)。我没有设置任何类型边界约束。
代码
查看this example 对泛型类型的apply 方法后
trait BlockTypeFactory[A]{
def findTransactions( blocks: Seq[A], address: String): Seq[TransactionResponse]
}
object BlockTypeFactory{
// I want this method to return the correct implementations
def getBlockExplorer[A](blockType: A): BlockTypeFactory[A] = {
blockType match {
case type1: BlockchainType1 => new BlockTypeFactory[BlockchainType1](new BlockType1Impl)
// error : Expression of type BlockTypeFactory[BlockType1Impl] doesn't conform with the expected type BlockTypeFactory[A]
case type2: BlockchainType2 => new BlockType2Impl
}
}
def apply[A](implicit ev: BlockTypeFactory[A],blockType: A):BlockTypeFactory[A] = ev
}
但我得到 关于预期类型的错误。 到底出了什么问题?
其他类
class BlockType1Impl extends BlockTypeFactory[BlockchainType1]
class BlockType2Impl extends BlockTypeFactory[BlockchainType2]
case class BlockchainType1(...)
case class BlockchainType2(...)
【问题讨论】:
-
宁可使用typeclass机制来表示工厂,实例为
Atype
标签: scala generics factory-pattern