问题标签 [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 回答
3112 浏览

java - Java 中的自引用泛型

我不知道为什么我不能使用自引用泛型。

在 Java 中,我有一个自引用泛型。有很多事情Intents),以及查找(解决)这些事情的策略(ResolutionStrategys)。

自引用Intent类型定义如下。我想在编译时定义只能接收ResolutionStrategy接受相同意图的类。

因此,解决策略是:

因此,当我对这些Intents 的列表进行操作时,我并不真正关心它们是什么。但是,我确实想在我的领域模型中创建代表具体事物的特定类型。这是一个例子:

IdentifiableResolution是一个简单而无趣的实现Resolution

到目前为止一切都很好。然后计划是为这些Intents 构建一个漂亮的图,然后迭代它们,将每个传递给 aResolutionStrategyFactory以获得解决它们的相关策略。但是,我不能将OrgIntent任何通用的东西添加到列表中!

有什么想法我应该声明orgIntent的吗?

更新

感谢@zapl,我意识到方法定义上的泛型类型参数是一个完整的红鲱鱼。

这可以编译,但大概意味着我可以以某种方式将Intent其泛化为具有任何旧的废话作为第一个泛型类型?

0 投票
1 回答
507 浏览

java - 获取泛型类型的泛型参数

对于某些背景,我正在为我正在开发的编程语言(即 JVM 语言)开发一些框架内容,并且正在使用 Java 类测试一些框架,因此下面有所有奇怪的包装器。


所以,我的问题是,如何获取类型参数边界的类型变量?目前我有以下内容:

但是当它遇到这样的事情时,它会失败并出现 StackOverflowException:

public class A<T extends A<T>> ...

因为它只是继续尝试一遍又一遍地获取 A 的类型参数。我一直无法找到获取类型变量的类型变量的方法......我尝试过使用 getGenericDeclaration,但它似乎没有返回我需要的内容。任何帮助是极大的赞赏。

0 投票
2 回答
122 浏览

java - 如何使用 Java 泛型两次扩展构建器类?

我有一个要扩展的构建器类,这是简单的版本:

当我扩展它时,我知道我可以毫无问题地做到这一点:

但现在我想用另一个类进一步扩展它,所以我试试这个:

我的新 CCC 课程运行良好,但我的 BBB 课程坏了,我不知道为什么。

我需要做什么来修复它?

0 投票
2 回答
388 浏览

c# - 有没有办法创建嵌套的开放泛型类型?

在 C# 中,很容易创建一个开放的泛型类型,typeof(IEnumerable<>). 有没有办法创建一个包含开放泛型的类型?以下不起作用:typeof(IEnumerable<IFoo<>>)

0 投票
1 回答
41 浏览

c# - 有什么方法可以从 C# 中的其他类型参数的约束中推断出一些类型参数?

假设我有以下代码:

每当我打电话时CreateFactory(),我必须同时传入 TWidgetFactory 和 TWidget 类型参数。这似乎没有必要,因为 TWidgetFactory 已经有一个约束,因此它的任何特化都必须已经指定 TWidget。有什么方法可以在调用时自动推断 TWidget CreateFactory(),即使我必须为其添加某种额外的辅助方法?

(上面是一个简单的例子,但在实践中可能会变得更加复杂,所以这可以节省很多复杂性。)

0 投票
1 回答
305 浏览

c# - 我已经阅读了所有关于协变、逆变和不变性的内容,但我仍然不知道如何设计我的代码

在发布此之前,我已经尽可能多地搜索和阅读/研究了似乎合理的内容。我发现了类似的问题,但大多数帖子实际上更多地涉及将“派生类型列表”传递给需要“基本类型列表”的函数调用。我可以欣赏动物的例子,并且觉得我在学习后有了更好的把握。

话虽如此,我仍然无法弄清楚如何在我的特定用例中解决问题。我需要在集合中聚合“TestInterface(s) 的通用类”的实例。我已经在我最大的努力下复制/粘贴了似乎是完成任务的最佳方式。

上面的代码失败并出现以下编译错误:

错误 CS1503:参数 1:无法从“Covariance.GenericClass”转换为“Covariance.GenericClass”

错误 CS1503:参数 1:无法从“Covariance.GenericClass”转换为“Covariance.GenericClass”

任何帮助/指导或相关链接将不胜感激。如果这是一个重复的问题,我再次道歉。谢谢你!

0 投票
3 回答
3451 浏览

c# - 如何约束泛型方法的嵌套泛型类型

我正在尝试创建一个基于给定泛型类型从数据库返回数据的方法。

接口:(此定义编译)

一个可能的具体实现:(这个定义编译)

尝试基于接口编写通用方法:(此定义不编译)

错误:

像这样使用:


问题:

为什么这会为接口编译,而不是为方法编译?

我希望两者都能工作或都失败。我假设编译器可以从给定的 TOrderPosition 类型推断出 TOrder 和 TArticle 的类型,该类型定义了文章和订单的具体类型。

我想知道为什么会发生这种情况以及是否以及如何解决问题而无需明确指定所有类型。

0 投票
0 回答
90 浏览

java - 泛型类类型参数

前提条件:

有一个第三方库提供以下代码(不能更改):


要求:

我想构建一个简单的类来模拟这些请求并为模拟添加一些通用功能。

到目前为止我所拥有的:


问题:

如何使用MockRequestBuilder

明显地

不起作用,因为SimpleRequest.class不提供有关其他两种泛型类型的信息。

我发现的第二种方法是使用

但这当然会在调用方法时返回SimpleRequest没有类型信息而不是所需的信息。SimpleRequest<ConcreteType1>build();

0 投票
2 回答
201 浏览

java - 使用嵌套泛型和继承编译错误

我无法找到解决我的问题的方法。在这两种情况下,我都会收到编译错误。有什么帮助让它工作吗?

情况1:

错误:类型参数 T 不在类型变量 T 的范围内

案例二:

错误:不兼容的类型:实体无法转换为 capture#1 of ? 扩展实体

问题:为什么增强的 for 循环编译并且它不会抛出类似于上面的编译错误?

0 投票
4 回答
124 浏览

c# - 类通过泛型相互耦合

我目前正在学习 C#,我来自 Java。在 Java 中,我可以这样做:

在 C# 中,我很难实现同样的目标。