【发布时间】:2014-01-22 14:10:49
【问题描述】:
我有如下所示的 scala 函数:
现在,取决于 T 的类型(在我的情况下,它可以是 Double、Boolean 和 LocalDate),
我需要在ob 上应用函数。像这样的东西(我知道代码没有意义,但我试图传达我的意思):
def X[T](ob: Observable[T]): Observable[T] = {
//code
T match {
case Double => DoSomething1(ob:Observable[Double]):Observable[Double]
case Boolean => DoSomething2(ob:Observable[Boolean]):Observable[Boolean]
case LocalDate => DoSomething3(ob:Observable[LocalDate]):Observable[LocalDate]
}
}
考虑到 Scala 的 Erasure 属性,是否可以以某种方式使用反射来完成工作?有没有可能?
【问题讨论】:
-
t: T(例如您要匹配的变量)来自哪里? -
@om-nom-nom 我希望编辑清楚
-
@om-nom-nom 那么,在我的情况下,你建议我做什么?
-
这听起来更像是您可以通过继承和多态来解决的问题。您可以使用常规重载或子类化。如果没有别的,看看蛋糕图案,最后是磁铁图案。使用磁铁模式,您可以灵活地选择您的实现。我不确切知道您要做什么,所以我无法举出更具体的例子。 spray.io/blog/2012-12-13-the-magnet-pattern
标签: scala generics reflection pattern-matching erasure