也许不是最精确的标题,但它有点难以描述;也许你们可以帮我在这里?我正在使用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