我怎样才能做到这一点:
final case class ChairId(id: String)
trait GeneratorLike[TO, TC <: AbstractId] {
val prefix: String
def generate(): TC = TO.apply(prefix + "-" + UUID.randomUUID())
}
implicit object ChairIdGenerator extends GeneratorLike[ChairId.type, ChairId] {
val prefix: String = "CHAIR"
}
implicit def IdFn[TO, TC <: AbstractId](x: TO)(implicit ev: GeneratorLike[TO, TC]): GeneratorLike[TO, TC] = ev
//right now I can call:
ChairId.generate()
我不想为这种情况定义伴随对象,我想知道是否有机会使用隐式扩展对象?
当我这样做时(我使用 TO 作为 TypeObject 和 TC 作为 TypeClass 命名)idFn[TO, TC]
我希望 TO 成为实现的对象,def apply(id: String): TC
我可以强制执行吗?我将如何使用此功能?在类型参数上调用函数感觉完全不可能:/