おそらく最も正確なタイトルではないかもしれませんが、説明するのは少し難しいでしょう。多分あなたたちはここで私を助けることができますか?私は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に渡して、正しいバージョンを取得します。適切にキャストされたアイテムを取得するためのユーティリティメソッド/ゲッターを作成することができましたが、各子クラスごとにこのコードを書き直すことはできません。私は、基底クラスは、ジェネリックを作ることで、この問題を解決することができると思ったが、今はそれゆえ、新たにジェネリッククラスはそれらを定義しようとしているクラスへの参照を必要とする問題に実行している:あなたのよう
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