2009-12-17 89 views
1
class MyModel(var username:String, var password:String) extends FrameworkModel 

object MyModelQuery extends FrameworkQuery { 
    type T = MyModel 
} 

trait FrameworkQuery { 
type T 
//do something with that type 
} 

因此,我得到一個類和一個對象,其中後者在被定義爲抽象類型的特徵中混合。有沒有辦法我可以編程設置type爲MyModel類的類型,所以客戶端不需要?即「對象MyModelQuery擴展FrameworkQuery」將照顧它以編程方式設置抽象類型的「類型」

回答

0

你可以通過在模型中嵌套查詢來實現類似的效果嗎?

trait FrameworkModel { 
    val model = this 
    trait FrameworkQuery { 
    type T = model.type 
    def getModel: T = model 
    } 
} 

class UserModel extends FrameworkModel { 
    // model stuff... 
    object UserQuery extends FrameworkQuery { 
    // query stuff... 
    } 
} 
+0

這種做法的問題是,客戶端可以聲明多個模型是這樣的: 類MyUserModel(VAR用戶名:字符串,VAR密碼:字符串)擴展FrameworkModel 類MyCommentModel(VAR評論:字符串)在每種情況下延伸FrameworkModel 我想將模型類型傳遞給相應的查詢對象 – poko 2009-12-18 14:51:17

+0

中的查詢特徵。幾乎看起來像你想要基於約定的靜態類型。伴侶對象就是一個例子,但我不認爲你可以像你所期望的那樣做任意東西。 – 2009-12-18 16:49:09

+0

編輯答案以反映我對您問題的最新理解。 – 2009-12-18 16:50:53

0
trait T{ 
    type X = this.type 
    def x: X = this 
} 
object A extends T{ 
    def b = "Yep" 
}  
scala> A.x.b 
res0: java.lang.String = Yep 
+0

謝謝,雖然我不明白這是如何工作在我的情況。 this.type將返回MyModel對象作爲類型,而不是我想引用的MyModel類。我將稍微改變一下這個例子,使其更清晰 – poko 2009-12-17 14:37:48

+0

你已經改變了類型,對吧?我沒有看到你如何與MyModelQuery和MyModel相關聯。 – 2009-12-17 14:45:34

+0

MyModel可以通過反射和中繼命名約定查找。所以我可以得到一個MyModel的類的引用,但接下來呢?所以我想我的問題是,是否有辦法執行類似於這個#類型的東西,但在任意類上? – poko 2009-12-18 15:06:08