也許不是最精確的標題,但它有點難以描述;也許你們可以幫我在這裏?我正在使用MVC格式編寫遊戲,並且我希望每個基類(控制器,模型和視圖)都具有對其伴隨功能的引用,形成一種三角形(即,模型具有對控制器的引用定義它,並引用它大部分這些類的觀點,等等)是這樣的:通用類約束其中<T>是約束通用類的類型
public class Model {
public Controller controller;
public View view;
public void Connect (Controller controller, View view) {
this.controller = controller;
this.view = view;
}
}
這是正常的,但每當我打算拉起ChildModel的控制器,我需要投到相應的ChildController以獲取正確的版本。我可以讓一個實用方法/ getter來獲取一個合適的投射物,但我寧願不爲每個孩子類重寫這段代碼。我以爲我可以通過使基類的通用解決這個問題,但我現在運行到哪裏,新的通用類需要的是試圖定義它們的類引用的一個問題,因此:
public class Model<V, C> where V : View<?, C> where C : Controller<?, V> {
public Controller<?, V> controller;
public View<?, C> view;
public void Connect (Controller<?, V> controller, View<?, C> view) {
this.controller = controller;
this.view = view;
}
}
正如你可以看到,這很快就會在基類中變得混亂。我不知道用什麼符號(參考上面的例子)試圖定義約束的模型。將「模型」放入問號似乎也不能編譯,因爲我遇到了一個地獄般的拳擊轉換問題。
有沒有辦法完成我所追求的,或者我只是想在這裏過於聰明?如果這可以工作,我很想能夠與約束到他們的「三角」的類型聲明子類,所以我能避免不必要的鑄造或輔助方法:
public class ChildModel<ChildView, ChildController> {
public ChildModel() {
this.controller <- calls ChildController type, not base type!
}
}
人有什麼想法?
相關http://stackoverflow.com/a/25166761/380384和http://stackoverflow.com/a/4632320/380384 – ja72