java - 几乎循环类型绑定(bind)的递归类型参数

标签 java generics bounded-wildcard

我有以下两个接口(interface):

/**
 * 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)),应该是一个Viewable对该观点的看法 (a)。
  • Viewable的类型参数(称为(b)),应该是一个View ,可通过相同的可视项 (b) 查看。

我想我已经完成了 View 的边界,但我如何让它们为 Viewable 工作? ?我现在得到的东西可以编译,但没有提供足够的保护。

到目前为止,我无法制定我不想要的被接受的东西,但是我可以制定我想要的东西,如果这有帮助的话:

  • public class Hand implements Viewable<HandView>
  • public interface HandView extends View<Hand>

最佳答案

由于您的 View 是一个标记界面,事实上您目前还没有制定任何您不接受的东西 想要,我完全质疑 View 界面的使用。你给自己施加了不必要的限制,只会带来麻烦。

简化!

/**
 * An interface for objects that are viewable via a view.
 * 
 * @param <T>   The type of viewable object
 */
public interface Viewable<T> {
    public void addViewCallback(final T view);

    public void removeViewCallback(final T view);
}

关于java - 几乎循环类型绑定(bind)的递归类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23364402/

相关文章:

java - 内容重绘缓慢的滚动合成看起来很难看

java - Oracle Java 教程 - 回答问题时可能出错

java - : "X.<String, String>method()" 中泛型语法的名称是什么

java - 泛型方法和通配符

java - 将文件上传到服务器的正确/正确方法是什么?

java - 有没有办法判断网络应用程序的编程语言?

generics - 如何在 Rust 中转换泛型原始类型?

generics - 迁移到 NHibernate 4.0.3.4000 时,Iesi.Collections.Generic.LinkedHashSet<T> 是 Iesi.Collections.Generic.ISet<T> 的最佳替代品吗

java - 原始类型、无界通配符和有界通配符

java - 强制接口(interface)方法返回值为多个类的通配符