加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 几乎循环类型绑定的递归类型参数

发布时间:2020-12-14 05:34:12 所属栏目: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 ViewT extends ViewableViewT {} /** * An interface for objects th
我有以下两个接口:
/**
 * 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).
>可视化的类型参数(称为(b))应该是一个视图,它可以通过同一个可视(b)查看.

我认为我已经完成了对View的限制,但是我如何使它们可视化?我现在得到的是编译,但没有提供足够的保护.

我现在不能制定一些我不想要接受的东西,但是我可以制定我想要的东西,如果这有帮助的话:

> public class Hand implements< HandView>
> public interface HandView扩展View< Hand>

解决方法

正如@SimonAndréForsberg所讨论的那样,编程太过防守往往是不必要的浪费时间,我们应该相信我们自己的声明.

但是,为了获得乐趣,这里是一个解决方案,可以在编译时强制执行所有在类/接口声明上的限制.

声明

视图界面:

public interface View<T extends Viewable<T,?>> {}

>这里,我们只想确保type参数是可视的.
>第二个类型的参数不需要限制,因为Viewable的声明将不允许可视的< T,?>如果存在?本身不是View< T>.

可视界面:

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>的类型参数.在行尾.
>与以前一样,不需要限制?因为我们说之后,第二个类型的参数需要是一个View< T>如果第一类参数是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> {
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读