首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >循环通用代码设计

循环通用代码设计
EN

Stack Overflow用户
提问于 2014-10-02 09:32:17
回答 1查看 57关注 0票数 1

试图抽象:我试图为组件和定向连接器网络设计一个通用模式。所有组件都由连接器连接。因此,在不失去通用性的情况下,想象一个由组件和连接器组成的链(非常简单的网络),我们有这样的东西: CompA -> ConnectorAB -> CompB -> ConnectorBC -> CompC ...et cetera

由于连接器应该是具有某些属性和函数的实际对象,所以我不能仅仅实现像组件的双链式列表这样的东西。

组件在列表中保存更多的输入和输出连接器,连接器保存它们的源组件和目标组件。我给你举一个例子--我的例子:

代码语言:javascript
运行
复制
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-模式)。

我想我错过了很多信息,所以如果有什么不清楚的地方,请询问。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-02 10:02:05

我认为以下内容将对您的需求做出最好的建模。您可能仍然会遇到一些差异和/或擦除问题。如果您这样做了,我建议您完全放弃泛型,而不是求助于原始类型。

代码语言:javascript
运行
复制
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> {}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26158041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档