问题标签 [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.
java - Java方法中的嵌套泛型?
我正在创建自己的 MVP 框架,但在使用泛型时遇到了麻烦。
我的演示者是这样定义的,内部类包含对子元素的引用,这些子元素也是通用演示者:
我有一个具体的实现
和
其中ResultsView、SearchView扩展View和Results、StringKey实现Key
方法 addStage(...) 引发以下编译时错误:
任何帮助或更好的做法,将不胜感激
c# - 为什么不能推断嵌套的泛型类型?
鉴于以下课程...
...以及以下方法...
为什么以下代码行不能暗示返回类型?
相反,我必须指定这样的泛型类型......
java - Java 泛型地狱
我怀疑这已经在这里被问过(并回答过),但我不知道如何命名这个问题。为什么只有当我没有通过课程本身时,我才能毫无问题地表达通配符?
这一切都归结为这段代码。一切都按预期工作,除了调用genericsHell(ShapeSaver.class)
:
java - 有界通配符不适用于插入地图的列表
以下代码解释了我的问题:
1号和2号有效,但没有。3 在 Eclipse 上给出错误。它说:Type mismatch: cannot convert from HashMap<String,List<f2>> to Map<String,List<? extends f1>>
请你帮我找出原因。
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 团队承受着很大的压力,不能让语言过于复杂。
c# - 泛型节点声明
Microsoft 将此作为学习泛型的冒泡排序示例。直到我到达第 76 和 77 行才有意义。这些声明是如何可能的?节点是一个类。您不必用 new 实例化它吗?您将如何优化排序?哪个部分是通用的,哪个是非通用的?
java - Java中的嵌套类型参数
这是我为了简化我的真实代码而编造的一个例子,所以如果它有点做作,我深表歉意。我想做的是从单个嵌套类型参数中有效地获取两个类型参数。我很确定这是不可能的,但我想我会试一试。
我知道我可以通过添加另一个类型参数来做到这一点:
但后来我必须添加多余的:
在我的真实案例中,我的泛型有时可以在 implements 子句中指定,例如
那时必须指定第二个类型参数更加痛苦,因为感觉就像它把实现细节扔到了我的脸上。不得不说
当 String 和 Bar 之间已经存在关系时,它看起来并不优雅。我知道它是 Java,所以这与领土有关,但只是好奇是否有解决方案。
c# - 使用泛型进行隐藏类型推断?
可能重复:
没有使用泛型扩展方法进行类型推断
我有一个通用接口,以及它的两个具体实现。
然后我有一个方法,它是实现该接口的对象集合的扩展方法,它应该处理集合并返回处理后的集合。
处理操作不会更改对象也不会产生新对象,因此我希望该方法的输出与输入的类型相同。
换句话说,我不希望方法的输出是接口类型的集合,而是我传入的实际具体类型。
但是,这会导致调用方法时出现类型推断问题。
我将用一个LINQPad示例进行说明:
这给了我以下两个编译时错误,您必须注释掉并在相关行中引发这两个消息:
错误 1:
“Interval<int>[]”不包含“Process”的定义,并且找不到接受“Interval<int>[]”类型的第一个参数的扩展方法“Process”(按 F4 添加使用指令或程序集引用)错误 2:
无法从用法中推断方法 'Extensions.Process<TInterval,T>(System.Collections.Generic.IEnumerable<TInterval>)' 的类型参数。尝试明确指定类型参数。
原因,或者我认为,是编译器在分析扩展方法是否适合时看起来“不够深入”。
如果我将扩展方法更改为:
然后它编译,但因此输出是:
并不是:
当然,如果我在调用的时候指定了类型,像这样:
...然后它可以工作,但这并不是那么好(IMO。)有没有办法欺骗编译器为我推断类型?
基本上,我想:
- 获取我调用方法的类型,而不是输入到接口的结果
- 避免一直告诉编译器是的,这确实是使用这些类型的另一个调用。这样做的原因是该方法将成为类似 LINQ 的调用链的一部分,因此我必须在每次调用后强制转换回已知类型,或者为每次调用指定完整类型。
java - 存储可比较对象的通用 java 类
我有一个通用的 java 类来存储可比较的:
我还有一个名为 Person 的抽象类:
和两个具体的子类,教授和学生:
现在,当我想像这样创建 MyGenericStorage 时,出现错误:
我认为这是因为我在理解泛型方面存在根本问题。有人可以向我解释一下,以及如何解决吗?
编辑:
我已将 MyGenericStorage 更改为以下内容:
现在它似乎工作了。有人可以解释为什么吗?
scala - 嵌套通用代码中清单的 Scala 实例化
如果我能弄清楚如何“将清单附加回通用调用堆栈”(正如 Joshua 在“Scala in Depth”的第 7.2.2 节中所写),那是否能让我沿着这些思路实例化 B?:
还是我需要一些视图绑定?