问题标签 [parameterized-types]

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 回答
361 浏览

delphi - Delphi中构造函数约束的用例是什么?

标题差不多就是...

为什么要使用constructor约束?

class约束 清楚地暗示了这一点。

如果您单独使用它,您将无法对您创建的东西做任何事情。

为什么它甚至存在?

附加信息:

请注意,在添加“构造函数”约束之前,以下代码不会编译:

0 投票
2 回答
5469 浏览

cdi - 当 bean 类实现还扩展了某些参数化接口的参数化接口时,CDI bean 类型解析问题

鉴于我缺乏解释问题的词汇,我通过一个重现失败并帮助查找原因的示例来展示它:

第二个块显示了 bean 类的 bean 类型集BeanClass1BeanClass2根据Weld. 在那里我们发现 bean types set 包含 typeBaseType<T>而不是BaseType<SomeType1>or BaseType<SomeType2>

所以,记住BeanClass2的间接接口对应的bean类型有类型变量而不是实际的类型参数。因此,根据本规范的最后一点, a被错误地认为可分配给。BaseType<P>WeldTSomeType2BeanClass2BaseType<SomeType1>

这是期望的行为还是错误?有解决方法吗?是否在新Weld版本中修复。

测试在使用 maven 工件 org.jboss.as:jboss-as-weld:7.1.1 的 JBoss AS 7.1.1 上执行

编辑:我认为这个问题的原因不是第一个答案建议的类型擦除(它已被删除),而是Weld. 生成 bean 类型所需的所有信息在运行时都可用。我猜这个错误是当Weld通过反射生成bean类的bean类型时。类型变量解析应该是递归的,显然不是。

我确信生成间接接口的 bean 类型所需的信息在运行时可用,因为我制作并测试了一个使用库完成此任务的方法 - 几年前我为内存高效的 java 序列化程序制作了 - 幸运的是它有一个函数这正是我们需要的:Type为 java 类的每个祖先生成/获取实例,递归解析类型变量。我试图将涉及的方法放在这里,但粘贴代码时出现格式问题;图书馆很长而且记录不充分的事实让我有理由放弃。

至少,为了说明如何解析间接接口的类型变量的本质,我编写了以下代码。它仅适用于特定类,但可以通过一些努力进行概括:

我希望这避免相信类型擦除是导致此问题的原因。

0 投票
1 回答
292 浏览

scala - scala模板函数与forSome

我正在尝试存在类型。

我正在玩一个函数,该函数需要一个序列,其中该序列的元素都是相同的类型。我有..

在哪里 ...

然后我遇到了“forSome”语法,发现我可以用它实现相同的约束。

为了比较,我写了以下内容......

我想了解的是 - 我错过了什么吗?一个签名比另一个签名有什么好处。

一个明显的区别是编译错误是不同的。

0 投票
2 回答
1255 浏览

java - 在 Java 中将不同的参数化类型存储在同一个泛型数组列表中

我喜欢在 java 中创建数据库表的类表示。列被设计为通用类,以便它可以处理表列可能具有的所有不同数据类型。

一个表有 0 ... n 个 TableColumns,所以我的表类看起来像这样:

这个想法是通过以下方式添加列。

然后我可以通过以下方式操作数据:

但是我目前的实现方式正在失去类型安全性......我的问题是如何实现列,因为列可能会获得不同的数据类型。

有人有线索吗?

0 投票
1 回答
82 浏览

scala - 如何对参数化类型(类)进行分组?

给定三个属于一起的类(我试图通过类型参数来表达这一点):



如果有“跨类”调用,我还没有设法定义正确的类型。所以我的问题是:

  • 这个问题叫什么名字?
  • 如何以类型安全的方式表达它?
0 投票
1 回答
87 浏览

d - D中的参数化类型和返回值为什么不起作用?

好的,看来我之前的问题现在已经解决了(我把它留在下面以供参考)。然而,又一个突然出现 - 再次,似乎我错过了一些东西。在这段代码中,我声明了以下内容:

然后在此之后,我声明了这些:

然后,我实现了以下功能:

编译器抗议最近的.left 和最近的.right 不是属性,尽管最近的是二叉树!(T),这似乎很奇怪。我错过了什么?


老问题:

我最近接触了 D,并试图构建一个二叉树实现,以此来测试我通过阅读它所学到的知识。现在,我首先声明如下:

我想这可以让我参数化一些类的东西。进一步来说:

现在,我试着写这个:

之后,编译器大声抱怨我的函数没有返回类型。我在这里做错了什么?如果有助于解释,我来自 Java 背景,并且我在 Xamarin Studio 中使用 dmd 编译器。

0 投票
1 回答
252 浏览

scala - Scala Def Macros - How do I get the parameterized type member of a symbol?

I'm trying to get the parameterized type of a member on a symbol in a MACRO context. I only have a symbol available (can't use weakTypeOf[List[Blah]]) because I am iterating over a bunch of classes.

returns...

How do I get IWantThis Type object???

I've tried:

I've tried extraction:

Keep in mind, I am using the 2.10.2 macro plugin.

0 投票
1 回答
2331 浏览

scala - 如何描述和修复这个 Scala 类型不匹配错误?

下面是我有时在使用参数化类型时遇到的一种情况的具体实例。基本上,我知道有些类型参数是兼容的,但我不知道如何向代码的某些部分证明这一点。

我正在编写一个将 url 映射到处理函数的请求路由器。下面是一些简化的代码。我创建了一个List[Route],其中 aRoute基本上是UrlMatcher, Function一对。

type 参数A用于匹配器可能从 URL 中提取的“参数”。它们将被传递给处理函数。例如,UrlMatcher[Int]看到像“/users/123”这样的 URL 路径的 a 可以将 123 传递给getUser(id: Int)函数。路由器可能如下所示:

问题是我得到类型不匹配错误,因为我不知道如何告诉它这两种类型是相同的。

我知道我可以重新设计它,使其Route具有类似的方法matchAndCall,但如果可能的话,我想保持这种逻辑流程。

更新/编辑

我不完全理解存在类型,但我试过这个......

它消除了上面的不匹配错误。但是,我还有另一个插入到ArrayBuffer.

现在错误是...

为什么P不兼容T,既然对它们没有约束T

0 投票
2 回答
83 浏览

java - 使用 Java 的参数化类型和多态性处理此通用编程场景的方法

假设我有一个界面:

以及实现该接口的对象:

我希望有一个通用函数,它以Map<Id, Foo>.

我还希望将成员变量private Map<Integer, Bar> barMap设置为此映射的返回值。

以下:

是合法的。

是非法的,因为我无法从 转换Map<Integer, Foo>Map<Integer, Bar>。我也不能将前者投给后者。

我将如何做到这一点?

0 投票
3 回答
88 浏览

java - java java.util.List接口中不同参数类型的含义

和有什么区别

public List<?> myList;

public List<String> myList;

我知道后者将存储一个ListmyList 对象(字符串),但不确定第一个做什么。我的猜测是它将接受任何对象type。但这安全吗?