Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
继承中的javapecs实现_Java_Generics_Inheritance_Pecs - Fatal编程技术网

继承中的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
,两者都实现一个公共接口,怎么样?