java – 几乎循环类型绑定的递归类型参数
我有以下两个接口:
/** * A marker interface to denote that an object implements a view on some other object. * * @param <T> The type of object that is viewed */ public interface View<T extends Viewable<View<T>>> { } /** * An interface for objects that are viewable via a view. * * @param <T> The type of viewable object */ public interface Viewable<T extends View<?>> { public void addViewCallback(final T view); public void removeViewCallback(final T view); } 我想执行以下操作: > View(称为(a))的type参数应该是可视的视图(a). 我认为我已经完成了对View的限制,但是我如何使它们可视化?我现在得到的是编译,但没有提供足够的保护. 我现在不能制定一些我不想要接受的东西,但是我可以制定我想要的东西,如果这有帮助的话: > public class Hand implements< HandView> 解决方法
正如@SimonAndréForsberg所讨论的那样,编程太过防守往往是不必要的浪费时间,我们应该相信我们自己的声明.
但是,为了获得乐趣,这里是一个解决方案,可以在编译时强制执行所有在类/接口声明上的限制. 声明 视图界面: public interface View<T extends Viewable<T,?>> {} >这里,我们只想确保type参数是可视的. 可视界面: public interface Viewable<T extends Viewable<T,?>,V extends View<T>> { public void addViewCallback(final V view); public void removeViewCallback(final V view); } >这里,T需要被声明为可见,因为我们将其用作View< T>的类型参数.在行尾. 用法 public class Hand implements Viewable<Hand,HandView> { @Override public void addViewCallback(HandView view) {} @Override public void removeViewCallback(HandView view) {} } public interface HandView extends View<Hand> { } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |