generics 相关问题

泛型是一种参数多态,可以在各种语言中找到,包括.NET语言,Java和Swift。

Java 编译器是否有非类型擦除的泛型扩展可用作第 3 方编译器扩展?

我对类型擦除的 Java 泛型的限制越来越感到沮丧。我想知道是否有一个自定义 Java 编译器可以提供完整版本的泛型而没有任何怪癖

回答 4 投票 0

java编译器奇怪:在同一个类中声明的字段,但“不可见”

eclipse编译器拒绝编译以下代码,提示字段s不可见。 (IBM的Aspect J编译器也拒绝,指出“s无法解析”)这是为什么呢? 酒吧...

回答 5 投票 0

接口中通用集合的协方差问题

我有点困惑为什么会出现这个错误。既然我已经将 T 声明为 out,那么返回它的类型不是应该可以吗? 公共接口 IWebFeed 其中 T : BaseItem { 列表<...

回答 2 投票 0

通用接口引用如何接受非通用对象?

我有代码 IEnumerable any_object = new card[] { }; 其中card是一个不实现IEnumerable的类。我无法理解这段代码如何工作?

回答 1 投票 0

解决泛型的泛型

我正在尝试在 TypeScript 中创建一个可重用的实用程序类型,它可以与任何符合通用结构的地图类型一起使用。这是我的基本设置: 输入 SomeMap = { [键:字符串]:T; }; 我...

回答 1 投票 0

如何将 Linq First 与通用 <T> 基类一起使用

我正在研究这篇 Xaml Brewer 文章,并对其进行轻微修改以使用我的模型。它使用 T 类型的通用 MasterDetailViewModel 基类。 基类是这样声明的 公共腹肌...

回答 1 投票 0

此类型参数可能需要打字稿中的“extends”约束

考虑打字稿中的这些类和模型。 类申请人模型{ 名称:字符串=''; } 抽象类 BaseApplicant { 抽象handleApplicantData(applicantData:T,isPrimaryAppl...

回答 1 投票 0

具有相同访问器的属性

我们有一些大型类,其中有数十个属性,这些属性具有基本相同的简单访问器: 公共结构 ObservableField { 内部 T 值; 公共 ObservableFile(T val) =&...

回答 1 投票 0

具有相同访问器的属性

我们有一些大型类,其中包含具有基本相同的简单访问器的属性说明: 公共 ObservableField { 内部 T 值; 公共 ObservableFile(T val) => th...

回答 1 投票 0

方括号内的 **(双星/星号)和 *(星号/星号)对于 Python 3.12+ 中的类和函数声明意味着什么?

当 T、*Ts、**P 直接用在类或函数名称后面的方括号中或与 type 关键字一起使用时,它们的含义是什么? 类 ChildClass[T, *Ts, **P]: ... def foo[T, *Ts, **P](arg: T) -...

回答 1 投票 0

函数包装泛型类型确定

函数回调Wrapper(cb?: () => T): T { 返回cb?.() ?? '默认值'; } const a =callbackWrapper(() => 7); // a 应该是数字 const b =callbackWrapper(...

回答 1 投票 0

强制装饰器的类型参数成为方法返回类型的子集

我试图强制装饰器的类型参数成为装饰方法返回类型的子集,但我无法解决这个问题: 函数 foo() { 返回功能 我试图强制装饰器的类型参数成为装饰方法返回类型的子集,但我无法解决这个问题: function foo<U>() { return function<T extends U>(target: any, propertyKey: any, descriptor: TypedPropertyDescriptor<() => T>){}; } class Bar { a = 1; } class Baz { @foo<Bar>() // should be valid but it fails with 1241 @foo<null>() // should be valid but it fails with 1241 @foo<Bar | null>() // should be valid and it is valid @foo<number>() // should fail and it does fail qux(): Bar | null { return new Bar(); } } 我不想更改返回类型,我想这是我的问题。我只想检查 U 是否是 T 的子集。 编辑:我正在使用 experimentalDecorators,请参阅 https://tsplay.dev/w28pYm。 问题在于您错误地编写了 constraint T extends U,这意味着 T 必须是 U 的子类型。但你确实希望它是相反的,其中 T 是 U 的 超类型。如果你可以写 T super U 就好了,但是 TypeScript 不支持这样的 下界 约束。 在 microsoft/TypeScript#14520 上有一个长期开放的功能请求,但到目前为止它还不是该语言的一部分。 幸运的是,至少从调用者的角度来看,您基本上可以模拟这样的约束。这个想法是使用条件类型将T extends U(这不是你想要的)交换为U extends T(这是你想要的)。像这样: function foo<U>() { return function <T extends ([U] extends [T] ? unknown : never)>( target: any, propertyKey: any, descriptor: TypedPropertyDescriptor<() => T>) { }; } 这就是它的工作原理。如果 U extends T 为 true,则检查 [U] extends [T] 成功,并且对 T 的约束变为 T extends unknown,它始终为 true,因为 unknown 是 TypeScript 顶级类型)。但是,如果 U extends T 为 false,则检查 [U] extends [T] 失败,并且对 T 的约束变为 T extends never,这(几乎)总是 false(除非 T 是 never 但这不太可能意外发生) )因为 never 是 TypeScript 底层类型。 请注意,条件类型是 [U] extends [T] ? unknown : never 而不是 U extends T ? unknown : never,因为后者将是 分布式条件类型,而这不是您想要的,因为如果 U 是 union 类型,您不希望检查U的每个成员与T。用一元组 [+] 包裹支票的两侧会关闭分配性,同时保留支票的意义。 现在你得到了你期望的行为: class Baz { @foo<Bar>() // okay @foo<null>() // okay @foo<Bar | null>() // okay @foo<number>() // error qux(): Bar | null { return new Bar(); } } Playground 代码链接

回答 1 投票 0

组合泛型边界是反模式吗?

作为我之前问题的后续 具有组合通用边界的函数,例如: void doStuff(T 参数) { // 做一些只有在

回答 3 投票 0

如何使用带有参数的 Swift 测试来测试泛型函数?

设置: 我的应用程序有一个通用函数,可以在其中心点镜像任意元素的二次矩阵: func pointMirroredMatrix(_ 矩阵: inout [[T]]) { 断言(matrix.coun...

回答 1 投票 0

避免通用约束重复

我正在尝试为通用类约束创建别名以避免重复。 所以修改这段代码: 基类{} 类 Sub1 扩展 Base{} ...

回答 1 投票 0

具有泛型函数的 Typescript Curry 函数

下面是来自medium.com 文章的打字稿咖喱函数定义,非常简洁。我想知道是否有可能创建一个像这样的打字稿咖喱函数......

回答 1 投票 0

创建泛型类型数组 (Java)

我需要学校练习方面的帮助,我有以下课程: 队列类 {} 乘客等级{} 类总线{ 私人队列[]乘客; 公共巴士(){ @

回答 1 投票 0

如何在 Python 中专门化一个类(输入泛型)

如何为专门的(打字意义上的)类提供不同的定义? 例如,为什么这可能有用: TElement = TypeVar('TElement') 类 BaseCollection(Generic[TElement]): 名字...

回答 1 投票 0

<E>和<Object>区别及用法

有人可以向我解释一下在列表类中使用 E 或 Object 有何区别,以及它们的单一用法和定义。 我必须在 LinkedLists 中使用它们来实现方法。

回答 2 投票 0

是否可以让算法通用地处理对象的成员?

我仍然不确定标题是否正确,因为我不知道答案,所以欢迎提出任何改进建议。 我需要一种方法来计算某些容器的范围(最小值和最大值)...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.