作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
查看类结构。我有模型和 View ;
abstract class Model {
}
abstract class View <M extends Model> {
public M model;
View(M model) {
this.model = model;
}
}
class ButtonModel extends Model {
public String text;
}
class ButtonView extends View<ButtonModel> {
public Runnable onClickRunnable;
ButtonView(ButtonModel model) {
super(model);
}
}
我想编写类型安全的 View 结构。
public static <T extends Model> View<? extends T> build (T model) {
if (model instanceof ButtonModel)
return new ButtonView((ButtonModel)model);
else if(...)
}
为什么我需要将新的 ButtonView 转换为 View ?怎样才能写得更干净呢?
最佳答案
我认为你把事情过于复杂化了。您在这里实际上并不需要泛型,只需使用良好的旧方法重载即可:
public static ButtonView build (ButtonModel model) {
return new ButtonView(model);
}
public static SomeOtherView build (SomeOtherModel model) {
return new SomeOtherView(model);
}
// etc
为每种模型类型编写重载方法与为每种模型类型编写包含 instanceof
的单个方法没有什么不同。
关于java泛型类型结论,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33435030/
我是一名优秀的程序员,十分优秀!