【发布时间】:2019-08-07 20:28:27
【问题描述】:
def recordToType[A <: TBase[T, F]](record: ConsumerRecord[String, Array[Byte]]): A = {
(new TDeserializer(new TCompactProtocol.Factory())).deserialize(new A[T, F](), record.value())
}
上面的语法不起作用,但基本上我希望 A 被限制为 TBase 但 TBase 需要两个类型参数。如果我将这些参数排除在外,则表示参数是必需的,如果我输入参数,则表示参数未解析...编写此代码的正确方法是什么?
【问题讨论】:
-
只需将额外的类型参数添加到列表中:
def recordToType[T, F, A <: TBase[T, F]] -
new A[T, F]()不会编译,因为构造函数可以接受参数(无论如何它应该只是new A())。您应该考虑使用类型类来解决这个问题,并使用工厂方法来创建新实例。 -
你能给我们一个MCVE吗?