【发布时间】:2017-01-08 15:57:10
【问题描述】:
我想要一个具有静态可用函数(由 trait 收缩)的类。然后我想要一个类型参数化的方法,它将这种类型作为其类型参数并访问收缩的静态函数。 (是的,我知道静态这个词是 Java 而不是 Scala,但你知道我的意思。)
我知道在 Scala 中拥有静态函数的唯一方法是让伴随对象扩展 trait。但是这样做有两个问题:
- 我不知道如何约束类型参数,使其伴随对象扩展某些特征。
- 我不知道如何访问静态方法,因为该类实际上与其伴生对象的类型不同。
这可能完全关闭,但我想做的是:
MyTrait {
def MyFunction() : Any //some function
}
case class MyClass(i: Int)
object MyClass extends MyTrait {
def MyFunction() = {/*do stuff*/}
}
//need the type as a class not an object because I need it for a higher order function like this
def SomeFunctionHigherOrderFunction[T /*constrain T such that the companion object of T <: MyTrait*/](someFunc : Function1[T, Any]) : Unit {
val someStuff = T.MyFunction()
/*use someStuff in here*/
}
SomeFunctionHigherOrderFunction[T](/*provide a Function1[T, Any]*/);
任何关于正确解决方案或解决此问题的更好方法的想法?
提前致谢!
【问题讨论】:
-
您的代码中有一些拼写错误。 Make sure we can compile the examples you give us!
标签: scala