问题标签 [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 投票
2 回答
457 浏览

java - Java方法中的嵌套泛型?

我正在创建自己的 MVP 框架,但在使用泛型时遇到了麻烦。

我的演示者是这样定义的,内部类包含对子元素的引用,这些子元素也是通用演示者:

我有一个具体的实现

其中ResultsView、SearchView扩展View和Results、StringKey实现Key

方法 addStage(...) 引发以下编译时错误:

任何帮助或更好的做法,将不胜感激

0 投票
1 回答
3185 浏览

c# - 为什么不能推断嵌套的泛型类型?

鉴于以下课程...

...以及以下方法...

为什么以下代码行不能暗示返回类型?

相反,我必须指定这样的泛型类型......

0 投票
2 回答
2118 浏览

java - Java 泛型地狱

我怀疑这已经在这里被问过(并回答过),但我不知道如何命名这个问题。为什么只有当我没有通过课程本身时,我才能毫无问题地表达通配符?

这一切都归结为这段代码。一切都按预期工作,除了调用genericsHell(ShapeSaver.class)

0 投票
1 回答
62 浏览

java - 有界通配符不适用于插入地图的列表

以下代码解释了我的问题:

1号和2号有效,但没有。3 在 Eclipse 上给出错误。它说:Type mismatch: cannot convert from HashMap<String,List<f2>> to Map<String,List<? extends f1>>请你帮我找出原因。

0 投票
2 回答
450 浏览

c# - 为什么 C# 不支持泛型的泛型(具有参数化类型的泛型)?

最近(可能是设计缺陷)我面临一项常规任务,需要有一个MyType<T>whereT不固定的集合(即在一个集合中存在多个不同的泛型实例化)。

由于它被广泛提议(对于这种情况),声明了一个抽象类:

然后我有一个集合MyType。但是对于这个集合,我有一个限制,即任何类型的元素都不能超过一个T

因此,我对ICollection<TBase>. 我想在其中包含一种Get<TParam>()获取与 type 对应的项目的方法TParam。稍后使用,如:

但是我意外地发现我什至不能声明它:

因为内部泛型(或所谓的“泛型泛型”)既不受 C# 支持,也不受 .NET 支持(我想)。您认为这些限制背后是否有任何具体原因(复杂性除外)?

更新 1.询问编译器版本和编译器错误。

Microsoft C#、.NET 3.5 (Visual Studio 2010)。错误:

错误 CS0081:类型参数声明必须是标识符而不是类型

错误 CS0246:找不到类型或命名空间名称“TCustom”(您是否缺少 using 指令或程序集引用?)

更新 2.询问我是否需要修复或解释原因。我真的很想知道为什么。但是,如果您对问题有很好的解决方案,也欢迎您。

更新 3.这个问题可能已经在这篇博文中得到了回答。看起来 CLR 团队承受着很大的压力,不能让语言过于复杂。

0 投票
4 回答
2012 浏览

c# - 泛型节点声明

Microsoft 将此作为学习泛型的冒泡排序示例。直到我到达第 76 和 77 行才有意义。这些声明是如何可能的?节点是一个类。您不必用 new 实例化它吗?您将如何优化排序?哪个部分是通用的,哪个是非通用的?

0 投票
3 回答
3999 浏览

java - Java中的嵌套类型参数

这是我为了简化我的真实代码而编造的一个例子,所以如果它有点做作,我深表歉意。我想做的是从单个嵌套类型参数中有效地获取两个类型参数。我很确定这是不可能的,但我想我会试一试。

我知道我可以通过添加另一个类型参数来做到这一点:

但后来我必须添加多余的:

在我的真实案例中,我的泛型有时可以在 implements 子句中指定,例如

那时必须指定第二个类型参数更加痛苦,因为感觉就像它把实现细节扔到了我的脸上。不得不说

当 String 和 Bar 之间已经存在关系时,它看起来并不优雅。我知道它是 Java,所以这与领土有关,但只是好奇是否有解决方案。

0 投票
0 回答
127 浏览

c# - 使用泛型进行隐藏类型推断?

可能重复:
没有使用泛型扩展方法进行类型推断

我有一个通用接口,以及它的两个具体实现。

然后我有一个方法,它是实现该接口的对象集合的扩展方法,它应该处理集合并返回处理后的集合。

处理操作不会更改对象也不会产生新对象,因此我希望该方法的输出与输入的类型相同。

换句话说,我不希望方法的输出是接口类型的集合,而是我传入的实际具体类型。

但是,这会导致调用方法时出现类型推断问题。

我将用一个LINQPad示例进行说明:

这给了我以下两个编译时错误,您必须注释掉并在相关行中引发这两个消息:

错误 1:
“Interval<int>[]”不包含“Process”的定义,并且找不到接受“Interval<int>[]”类型的第一个参数的扩展方法“Process”(按 F4 添加使用指令或程序集引用)

错误 2:
无法从用法中推断方法 'Extensions.Process<TInterval,T>(System.Collections.Generic.IEnumerable<TInterval>)' 的类型参数。尝试明确指定类型参数。

原因,或者我认为,是编译器在分析扩展方法是否适合时看起来“不够深入”。

如果我将扩展方法更改为:

然后它编译,但因此输出是:

并不是:

当然,如果我在调用的时候指定了类型,像这样:

...然后它可以工作,但这并不是那么好(IMO。)有没有办法欺骗编译器为我推断类型?

基本上,我想:

  1. 获取我调用方法的类型,而不是输入到接口的结果
  2. 避免一直告诉编译器是的,这确实是使用这些类型的另一个调用。这样做的原因是该方法将成为类似 LINQ 的调用链的一部分,因此我必须在每次调用后强制转换回已知类型,或者为每次调用指定完整类型。
0 投票
3 回答
481 浏览

java - 存储可比较对象的通用 java 类

我有一个通用的 java 类来存储可比较的:

我还有一个名为 Person 的抽象类:

和两个具体的子类,教授和学生:

现在,当我想像这样创建 MyGenericStorage 时,出现错误:

我认为这是因为我在理解泛型方面存在根本问题。有人可以向我解释一下,以及如何解决吗?

编辑:

我已将 MyGenericStorage 更改为以下内容:

现在它似乎工作了。有人可以解释为什么吗?

0 投票
1 回答
311 浏览

scala - 嵌套通用代码中清单的 Scala 实例化

如果我能弄清楚如何“将清单附加回通用调用堆栈”(正如 Joshua 在“Scala in Depth”的第 7.2.2 节中所写),那是否能让我沿着这些思路实例化 B?:

还是我需要一些视图绑定?