0

これは非常にばかげた質問かもしれませんが、とにかく試してみます。型付きクラスでワイルドカードを使用して、そのプロパティを取得しようとしています。

私はシンタックス (DSL のような) を提供して、着信メッセージをその型のパラメーター化に応じて処理するオブジェクトを作成しようとしています。私はシンタックスが次のように見えることを本当に望んでいます:

// 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 に渡されたクラスのプロパティのみを受け入れるようにしたいと考えています。リフレクションを使用するソリューションがありますが、このリフレクションを取り除きたいです。何か案が?

ありがとうございました!

4

1 に答える 1

1
def useVariable[RetVal](func: (T)=>RetVal) = //...
于 2012-05-07T11:54:35.317 に答える