将scala通配符用于类型化类

时间:2012-05-07 10:09:52

标签: scala wildcard

这可能是一个非常愚蠢的问题,但无论如何我都会尝试。我正在尝试使用带有类型类的通配符,这样我就可以获得它的属性。

我正在尝试提供一个sintax(类似于DSL)来创建对象,这些对象会根据它的类型参数化来处理传入的消息。 我真的很喜欢sintax看起来像这样:

// Types of message
trait TypeMessage
case class TypeMessage1 extends TypeMessage{
    val a : String,
    val b : Int
}
case class TypeMessage2 extends TypeMessage{
    val c : Double,
    val d : String
}

// Here is the problem
class TreatMsg[T <: TypeMessage] {
    // I'm using a random sintax here, just for ilustration
    def getParamInfo( variable : ?? ) = { 
        println("name: " + variable.name + "  value: " + variable.val + "  type: " + variable.val.getClass)
    }
}
object TreatMsg{
    def apply[T <: TypeMessage] = new TreatMsg[T]
}


// Creating actors
TreatMsg[TypeMessage1].getParamInfo(_.a)
TreatMsg[TypeMessage2].getParamInfo(_.d)

那么,如何使这个通配符工作?我的意思是,我希望“getParamInfo()”函数只接受传递给TreatMsg的类的属性。 我有一个使用reflection的解决方案,但我想摆脱这种反思。 有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

def useVariable[RetVal](func: (T)=>RetVal) = //...