我有以下两个接口(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/