问题标签 [nested-generics]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
289 浏览

java - 迭代嵌套地图

我将这些方法放在一起来帮助迭代嵌套地图(对于另一个 SO question)。

如您所见,前两种方法实际上几乎完全相同,除了它们的泛型以及一个调用iV和另一个调用iiV。有什么办法可以将它们折叠成一种方法,或者至少将机制的明确重复移动到一个地方?

如果做得好,应该可以迭代任何深度的嵌套地图。

0 投票
2 回答
177 浏览

java - 泛型谜题

我试图弄清楚如何让泛型跳过箍。

我有:

还有许多“子类型”类:

我想要的是声明一个具有两个类型参数Tand的类S,其中TTypeand绑定和S绑定。TMiddle

我看不到使用泛型来确保Sextends TAND implements的方法Middle。我想要的是这样的:

或者

但当然,两者都不合法。也许我缺少一些魔法?

0 投票
3 回答
112 浏览

java - 使用泛型接口实现泛型

我有一个接口 Value 和一个类 Record

Java 不会编译它并抱怨泛型声明 > 。有人可以告诉我为什么这是无效的语法吗?

0 投票
0 回答
155 浏览

c# - 递归通用定义

所以我正在观看令人敬畏的 Jon Skeet 的视频:http ://www.youtube.com/watch?v=3DkISWIouY4 (从头开始观看我要问你的部分!)

所以考虑下面的代码:

我们知道这不会运行,因为我们无法将 TSomething 扩展为它的实际类型,它将是<SimpleContainer<SimpleContainer<SimpleContainer<SimpleContainer...

但是,如果我们将定义更改为DeepContainer<T>

突然之间它起作用了。

但是,在我看来它没有。因为当我尝试扩展 TSomething 的类型时,我得到: SimpleContainer<SimpleContainer<SimpleContainer<SimpleContainer<SimpleContainer.

我无法理解这是如何工作的。

0 投票
2 回答
167 浏览

java - 无法使用通配符编译相关的 Java 泛型参数

由于不清楚的原因,以下 Java 小示例无法编译:

带有 ctx.put 的行会产生以下错误:

如果不使用通配符,则属性模式可以正常工作。

有什么解释为什么编译器不接受通配符类型的值?

0 投票
1 回答
191 浏览

java - Java泛型捕获内部类

我有这个代码:

在编译时我得到这个错误:

如果我将该行替换为

然后我得到一个未经检查的强制转换警告,但我不明白为什么编译器会捕获“?扩展 Edge<Integer>”。有人向我解释它发生了什么以及如何解决这个问题?

编辑:这是由 UndirectedGraphImpl 类实现的 Graph 接口

0 投票
0 回答
78 浏览

java - 通用方法的 URL 片段是怎么回事?

我正在使用IntelliJ IDEA并将其设置为在我的浏览器中为任何类型或成员打开 JavaDoc。现在看来,IntelliJ IDEA 无法猜测具有泛型类型作为参数的方法的完整 URL,当我尝试打开该方法的文档时,java.lang.Object.isAssignableFrom(Class<?>)它询问应该打开这两个 URL 中的哪一个:

  • file:///[...]/docs/api/java/lang/Class.html#isAssignableFrom(java.lang.Class<?>)
  • file:///[...]/docs/api/java/lang/Class.html#isAssignableFrom(java.lang.Class)

这两个相互竞争的标准是否用于使用泛型参数对方法的类型进行编码?我可以假设将来只会使用一个(大概是第一个)吗?

额外的好处:有没有办法将 IntelliJ IDEA 设置为默认情况下自动选择其中一种形式?

0 投票
1 回答
1429 浏览

java - Java 嵌套通配符绑定类型多次或作为泛型类型参数

我有一个带有嵌套通配符有界类型的有界类型参数的类。在类中,我需要在多个方法中使用绑定嵌套参数的类型。有没有办法将通配符有界类型定义为泛型类型参数,或者将其分配给泛型变量名,以便可以在多个地方轻松引用它?

现在实现类的方式就像

这实际上并没有将列表的类型限制为过滤器的类型,但在我们的情况下已经足够了。理想情况下,列表的类型将被限制为过滤器的类型,使用的结构可以将过滤器的推断类型绑定到一个名称,这很像方法上的有界类型参数,但在类级别。

基本上我想做类似的事情

据我所知和可以找到的,这是不可能的,但我希望 java 7 中可能有一个晦涩的特性或新特性可以使这成为可能。我知道可以指定第二个类型参数,例如

但我不希望子类在编译器可以确定时必须指定 G。

我能找到的唯一可能的选项/解决方案是在这个问题 的解决方案中给出一个带有工厂方法的浅子类 Java 和 Java 泛型中的嵌套类型参数- 多次使用相同的通配符

0 投票
1 回答
61 浏览

c# - 如何在c#中创建一个泛型类型的集合

我有如下课程

我想让类派生自 Relation 类型的列表/集合

我已经尝试过,但无法正确处理。即使是指向 SO 的右指针也会有所帮助

0 投票
1 回答
1263 浏览

java - 我可以在 Java 泛型中传递复杂的类型结构吗?

我目前正在尝试使用 Java 接口和泛型为概念模型实现 API。该模型(Transmodel V5.0)被详细描述为一个实体关系模型,但它没有指定使用的一些基本类型。例如,未定义各种实体的标识符类型或用于建立序列排序的类型。

由于我想尽可能保持 API 的通用性,我开始使用泛型来配置这些细节。我不想对类型做出任何假设,包括不假设任何事情都是一致的。每个实体可以有不同的标识符类型,每个序列可以有用于排序目的的不同类型。

我面临的问题是,一旦一个实体引用另一个实体,复杂性就会快速增长——我不仅需要传递其标识符的类型,还需要配置引用实体所需的一切。

例如我有:

我仍然可以阅读并理解它,但它变得有点冗长。然后像 VehicleJourney 这样的实体可以在其他实体中被引用,这使得类型参数列表爆炸。这几乎是我能想到的最小的不平凡的例子。

有没有办法创建单个 Java 实体来对类型系统的整个配置进行建模?我正在考虑将所有标识符类型和排序类型附加,然后可以作为一个传递的东西,将上面的示例变成这样的东西:

在带有问号的地方,必须以某种方式从 CONF 中提取 VehicleJourney 标识符的类型。如果这可行,那么复杂性应该保持在可管理的水平。