试图抽象:我试图为组件和定向连接器网络设计一个通用模式。所有组件都由连接器连接。因此,在不失去通用性的情况下,想象一个由组件和连接器组成的链(非常简单的网络),我们有这样的东西: CompA -> ConnectorAB -> CompB -> ConnectorBC -> CompC ...et cetera
由于连接器应该是具有某些属性和函数的实际对象,所以我不能仅仅实现像组件的双链式列表这样的东西。
组件在列表中保存更多的输入和输出连接器,连接器保存它们的源组件和目标组件。我给你举一个例子--我的例子:
interface Component<In extends Connector, Out extends Connector> { List<In> getIns();...}
interface Connector<S extends Component, T extends Component> { S getSource();...}
interface CompA<In extends Connector<?, CompA>, Out extends Connector<CompA, ?>> extends Component<In, Out> {}
interface CompB<In extends Connector<?, CompB>, Out extends Connector<CompB, ?>> extends Component<In, Out> {}
interface A_A extends Connector<CompA, CompA> {}
interface A_B extends Connector<CompA, CompB> {}
问题:
Component<Connector<Component.......>>>
),而是使用原始类型,这很好,但不管怎样,它似乎很混乱。CompA<In extends Connector<?, CompA>, Out extends Connector<CompA, ?>>
表达的是,我的CompA知道它连接到一个针对CompA的连接器。显然,这不是我在句法上所做的。A_A aa; aa.getSource(); //gives me a CompA, thats great. aa.getSource().getIns(); //gives me a List of raw Connectors, but i would like to have a list of partially defined connectors, they know they are referencing a compA aa.getSource().getIns().get(0).getTarget() // should give me a compA
编写了我的代码,很明显,这并不像我想要的那样工作,但是我认为´aa.getSource().getIns()可以工作,因为In至少是一个连接器,对吗?
我要求提供实现此模式的建议(因此,请更正我的代码!)它必须在java中,但我不需要只使用java-泛型。如果您可以使用非java-泛型模式来完成此抽象模式,则可能很好(基于其他java语言特性的模式,或OO-模式)。
我想我错过了很多信息,所以如果有什么不清楚的地方,请询问。
发布于 2014-10-02 10:02:05
我认为以下内容将对您的需求做出最好的建模。您可能仍然会遇到一些差异和/或擦除问题。如果您这样做了,我建议您完全放弃泛型,而不是求助于原始类型。
interface Component<SELF extends Component<SELF>> { Set<Connector<?, SELF>> getIns();...}
interface Connector<SOURCE extends Component<SOURCE>, DESTINATION extends Component<DESTINATION>> { SOURCE getSource();...}
interface CompA extends Component<CompA> {}
interface CompB extends Component<CompB> {}
interface A_A extends Connector<CompA, CompA> {}
interface A_B extends Connector<CompA, CompB> {}
https://stackoverflow.com/questions/26158041
复制相似问题