Scala如何在foreach中还原泛型类型

Liu Renjie

我有两个类,其中包含一些数据成员,如下所示:

class MyInfo {
   private val myId: String
   private val time: DateTime
   private val solution: Long
   private val banner: Int
}

Class HisInfo {
   private val id: String
   private val solution: Long
   private val banner: Int
}

如您所见,这两个类共享两个成员,而在我的真实项目中,它们共享更多的成员。我需要将它们保存到hbase中,并设计一个这样的类:

sealed trait Element[T] {
  def serialize(value: T)(implicit val helper: Helper[T]): Array[Byte]
  def deserialize(bytes: Array[Byte])(implicit val helper: Helper[T]): T
}

case object LongElement extends Element[Long] {...}
case object IntElement extends  Element[Int] {...}

class Info {
 protected val data: Map[Element[_], Any] = new mutable.Map[Element[_], Any]()
}

class MyInfo extends Info {
  val elements = List(LongElement, IntLement)
  def saveToHBase = {
   elements.foreach { e =>
     val v = e.serialize(data(e))
     // do sth with v
   }
  }

实际上,我已经定义了Helper [Int]和Helper [Long]的实现,但是编译器抱怨它找不到参数Helper [_1]的隐式值。有人可以帮我设计这些课程吗?

阿列克谢·罗曼诺夫(Alexey Romanov)

实际上,我已经定义了Helper [Int]和Helper [Long]的实现,但是编译器抱怨它找不到参数Helper [_1]的隐式值。

好吧,考虑一下如果elements包含Element[String](或其他没有隐式类型的)类型会发生什么Helper给定的类型elements,编译器无法知道不是。

我认为,如果无论如何Helper需要a的所有方法Element,则应使其成为该类型的一部分:

sealed trait Element[T] {
  val helper: Helper[T] // or def if you want to put it in the companion object
  def serialize(value: T): Array[Byte]
  def deserialize(bytes: Array[Byte]): T
}

或者

sealed abstract class Element[T](implicit val helper: Helper[T]) {
  def serialize(value: T): Array[Byte]
  def deserialize(bytes: Array[Byte]): T
}

至少在大多数情况下。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Scala中定义泛型?

来自分类Dev

如何在Scala中定义泛型?

来自分类Dev

如何在Scala中为泛型类型提供默认类型类?

来自分类Dev

Scala中的泛型类型

来自分类Dev

如何在Scala中设置绑定的类型参数以使数字具有泛型功能?

来自分类Dev

如何在Scala中设置绑定的类型参数以使数字具有泛型功能?

来自分类Dev

如何在Ada中明确显示泛型类型的大小?

来自分类Dev

如何在TypeScript泛型中动态指定类型?

来自分类Dev

如何在TypeScript中返回泛型类型

来自分类Dev

如何在Java中推断泛型类型?

来自分类Dev

如何在泛型类中处理可为空的类型

来自分类Dev

如何在Java中实例化泛型类型?

来自分类Dev

如何在泛型方法中引用类型参数的值

来自分类Dev

如何在 TypeScript 中实例化泛型类型?

来自分类Dev

如何匹配Scala泛型类型?

来自分类Dev

Scala中List内的泛型类型

来自分类Dev

在Scala中创建泛型类型的实例?

来自分类Dev

如何在泛型类中返回对象的泛型类型?

来自分类Dev

如何在泛型方法中获取泛型类型的类实例

来自分类Dev

如何在Scala中使用泛型

来自分类Dev

如何在Scala中使用泛型

来自分类Dev

如何检查某种类型是否符合Scala宏中的泛型类型范围?

来自分类Dev

在Java中,如何在泛型类型的实例上调用getClass时避免原始类型?

来自分类Dev

如何在 Roslyn 中检查方法参数类型/返回类型是否为泛型?

来自分类Dev

当泛型参数具有多种数据类型时,如何在rust中实现泛型?

来自分类Dev

如何在JAVA泛型中定义使用2个泛型参数扩展Map对象的类型?

来自分类Dev

Scala检查泛型类型

来自分类Dev

Scala 忽略泛型类型

来自分类Dev

在Scala Reflection中,如何获取具体子类的泛型类型参数?

Related 相关文章

  1. 1

    如何在Scala中定义泛型?

  2. 2

    如何在Scala中定义泛型?

  3. 3

    如何在Scala中为泛型类型提供默认类型类?

  4. 4

    Scala中的泛型类型

  5. 5

    如何在Scala中设置绑定的类型参数以使数字具有泛型功能?

  6. 6

    如何在Scala中设置绑定的类型参数以使数字具有泛型功能?

  7. 7

    如何在Ada中明确显示泛型类型的大小?

  8. 8

    如何在TypeScript泛型中动态指定类型?

  9. 9

    如何在TypeScript中返回泛型类型

  10. 10

    如何在Java中推断泛型类型?

  11. 11

    如何在泛型类中处理可为空的类型

  12. 12

    如何在Java中实例化泛型类型?

  13. 13

    如何在泛型方法中引用类型参数的值

  14. 14

    如何在 TypeScript 中实例化泛型类型?

  15. 15

    如何匹配Scala泛型类型?

  16. 16

    Scala中List内的泛型类型

  17. 17

    在Scala中创建泛型类型的实例?

  18. 18

    如何在泛型类中返回对象的泛型类型?

  19. 19

    如何在泛型方法中获取泛型类型的类实例

  20. 20

    如何在Scala中使用泛型

  21. 21

    如何在Scala中使用泛型

  22. 22

    如何检查某种类型是否符合Scala宏中的泛型类型范围?

  23. 23

    在Java中,如何在泛型类型的实例上调用getClass时避免原始类型?

  24. 24

    如何在 Roslyn 中检查方法参数类型/返回类型是否为泛型?

  25. 25

    当泛型参数具有多种数据类型时,如何在rust中实现泛型?

  26. 26

    如何在JAVA泛型中定义使用2个泛型参数扩展Map对象的类型?

  27. 27

    Scala检查泛型类型

  28. 28

    Scala 忽略泛型类型

  29. 29

    在Scala Reflection中,如何获取具体子类的泛型类型参数?

热门标签

归档