我有两个抽象类: 集装箱,节点互补泛型类
一种容器总是包含相同类型的节点,以及一种节点将只属于其相应的容器: NodeTypeA存储在ContainerTypeA中,Node中没有其他的子类存储在它中。 NodeTypeB存储在ContainerTypeB中,Node中没有其他子类存储在其中。从Node到它的容器的反向引用也应该知道容器的类型,所以这个关系是双向的。
我在Java中实现这个问题。
我不喜欢这样写道:
Container<C extends Container<C,N>, N extends Node<C,N>>
Node<C extends Container<C,N>, N extends Node<C,N>>
然而,当我定义在容器中的以下字段,我得到一个错误:
private List<N> nodes;
该错误消息说我应该代替n与节点。这对我来说似乎是多余的。为什么会发生这种情况,我怎么可以让程序知道,
N
应该等于
Node<C,N>
测试用例:
这背后的目的:
有许多不同种类的节点和许多不同的方式,他们可以互动。但是,他们有一些共同的主题。容器和节点应该是抽象类,我可以在其中定义方法和抽象方法来定义这些常见主题。 ContainerA和NodeA一起将定义一种特定的交互方法。我用这个仿制药,因为编程变得容易得多,如果我的IDE是足够聪明,知道在ContainerA任何节点总是在NodeA上,和NodeA上的主人总是一个ContainerA,所以我能避免一些不必要的类型转换。
(注:这个问题是类似的,但不等于Complementary generic types)从几个微不足道的错误(abstract
什么是确切的错误信息?你能包括一个最小的,但完整的类,导致这个错误? – Thilo
似乎很好:http://ideone.com/m1Qi2n。请构建一个[最小测试用例](http://stackoverflow.com/help/mcve)。 –
最小测试用例:https://ideone.com/wam0gi –