我想编写一个泛型方法,我需要从类型中检索伴随对象(尤其是apply
方法)。
[update] X
是一个案例类,因此伴随对象有一个apply方法。
例如:def f[X]() = X.apply("42")
答案 0 :(得分:2)
没有通用的解决方案,也没有任何限制伴随对象有应用方法。它可以是没有申请的伴侣。我建议在这种情况下使用类型类模式。
trait CompanionWithApply[T] {
def apply(s: String): T
}
class X(s: String)
object X extends CompanionWithApply[X] {
def apply(s: String): X = new X(s)
}
class Y(s: String)
object Y extends CompanionWithApply[Y]{
def apply(s: String): Y = new Y(s)
}
implicit val XCompanion = X
implicit val YCompanion = Y
def f[T: CompanionWithApply] = implicitly[CompanionWithApply[T]].apply("42")
println(f[X])
println(f[Y])
答案 1 :(得分:1)
另一个小得多的解决方案,但你必须是X,Y必须是案例类
case class X(s: String)
case class Y(s: String)
implicit def xConstruct = X
implicit def yConstruct = Y
def f[T](implicit construct: (String) => T) = construct("abc")
println(f[X])
println(f[Y])