继承中的javapecs实现
我在下面的实现中尝试创建一个继承中的javapecs实现,java,generics,inheritance,pecs,Java,Generics,Inheritance,Pecs,我在下面的实现中尝试创建一个TimeLine视图 public static class DashTimeLineView extends TimeLineView { public void create() { mAdapter = new DashTimeLineAdapter(); } } public static abstract class TimeLineView { protect
TimeLine
视图
public static class DashTimeLineView extends TimeLineView {
public void create() {
mAdapter = new DashTimeLineAdapter();
}
}
public static abstract class TimeLineView {
protected LineAdapter<? extends TimeLine> mAdapter;
protected BaseTimeLine timeLine;
private void updateAdapter(){
mAdapter.updateLine(timeLine);
}
}
public static class DashTimeLineAdapter extends LineAdapter<DashTimeLine> {
public DashTimeLineAdapter() {}
@Override
public void updateLine(DashTimeLine curvedLine) {}
}
public static abstract class LineAdapter<T extends TimeLine> {
protected T mLine;
public LineAdapter() {}
public abstract void updateLine(T orderType);
}
public static class DashTimeLine extends TimeLine {}
public static abstract class TimeLine extends BaseTimeLine{}
public static abstract class BaseTimeLine{}
公共静态类DashTimeLineView扩展了TimeLineView{
公共void create(){
mAdapter=新DashTimeLineAdapter();
}
}
公共静态抽象类TimeLineView{
受保护的LineAdapterHow是2.一种“解决方法”?这是类型安全泛型的预期用途。虽然我发现您的层次结构本身非常混乱,但我不清楚它的作用是什么,这不是一个好迹象。您可能需要在更广泛的范围内重新思考它。如果您安全地想将时间线的类型与mAdapter
可以使用的类型相匹配,那么唯一明智的方法是使TimeLineView
通用。您也不需要(t)timeLine
cast如果您将字段声明为T timeLine
并将适配器声明为LineAdapter mAdapter
@daniu这不是确切的实现,我试图简化,结果只提取了有用的部分。我该如何向普通观众说明,这是措辞还是实现?@Thomas you'T-you's-right.Unf重要的是,我不能将BaseTimeLine
更改为t timeline
,因为t
具有timeline
的上限,但是timeline
必须是BaseTimeLine
类型,因为t扩展timeline
和timeline扩展BaseTimeLine
是唯一需要这样做的原因需要说明的是,timeline
还可以引用在其类型层次结构中没有timeline
的实例(例如,SpecialTimeLine扩展BaseTimeLine
)。在这种情况下,适配器无论如何都无法工作。如果有一个没有适配器的BaseTimeLineView
和一个带有适配器的TimeLineView
,两者都实现一个公共接口,怎么样?