问题标签 [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.

Filter by
Sorted by
Tagged with
0 投票
1 回答
9657 浏览

某些 Java 泛型类型转换中的类型安全警告是什么意思?

Java 警告的含义是什么?

类型安全:从 Object 到 List<Integer> 的转换实际上是在检查擦除的类型 List

当我尝试将 Object 强制转换为具有通用信息的类型时,我收到此警告,例如在以下代码中:

0 投票
14 回答
76305 浏览

在 C# 中,为什么不能使用 List对象存储在列表中 variable

It seems that a List object cannot be stored in a List variable in C#, and can't even be explicitly cast that way.

List<string> sl = new List<string>();
Lis

It seems that a List object cannot be stored in a List variable in C#, and can't even be explicitly cast that way.

results in Cannot implicitly convert type System.Collections.Generic.List<string> to System.Collections.Generic.List<object>

And then...

results in Cannot convert type System.Collections.Generic.List<string> to System.Collections.Generic.List<object>

Of course, you can do it by pulling everything out of the string list and putting it back in one at a time, but it is a rather convoluted solution.


The reason is that a generic class like List<> is, for most purposes, treated externally as a normal class. e.g. when you say List<string>() the compiler says ListString() (which contains strings). [Technical folk: this is an extremely plain-English-ified version of what's going on]

Consequently, obviously the compiler can't be smart enough to convert a ListString to a ListObject by casting the items of its internal collection.

That's why there's extension methods for IEnumerable like Convert() that allow you to easily supply conversion for the items stored inside a collection, which could be as simple as casting from one to another.

0 投票
11 回答
152414 浏览

泛型类型转换 FROM 字符串

我有一个类,我想用它来存储另一个类的“属性”。这些属性只有一个名称和一个值。理想情况下,我希望能够添加类型化属性,以便返回的“值”始终是我想要的类型。

类型应该始终是原始类型。这个类继承了一个抽象类,它基本上将名称和值存储为字符串。这个想法是这个子类将为基类添加一些类型安全性(以及为我节省一些转换)。

所以,我创建了一个(大致)这样的类:

所以问题是:

是否有一种“通用”方法可以将字符串转换回原语?

我似乎找不到任何通用接口来链接全面的转换(像ItryParsable这样的东西本来是理想的!)。

0 投票
8 回答
29356 浏览

通用类型检查

有没有办法强制/限制传递给原语的类型? (布尔、整数、字符串等)

现在,我知道您可以通过where子句将泛型类型参数限制为类型或接口实现。但是,这不符合原语(AFAIK)的要求,因为它们并不都有共同点(除了有人说之前的对象!:P)。

所以,我目前的想法是咬紧牙关,做一个大的switch语句,并在失败时抛出一个ArgumentException 。


编辑1:

只是为了澄清:

代码定义应该是这样的:

和实例化:


编辑 2

@Jon Limjap - 好点,我已经在考虑了。我确信有一个通用方法可用于确定该类型是值类型还是引用类型。

这对于立即删除许多我不想处理的对象很有用(但是您需要担心使用的结构,例如Size)。有趣的问题不是吗?:)

这里是:

取自MSDN


我很好奇。这可以使用扩展方法在 .NET 3.x 中完成吗?创建一个接口,并在扩展方法中实现该接口(这可能比有点胖的开关更干净)。另外,如果您以后需要扩展到任何轻量级自定义类型,它们也可以实现相同的接口,而无需更改基本代码。

你们有什么感想?

可悲的消息是我在框架 2 中工作!:D


编辑 3

Jon Limjaps Pointer开始,这太简单了。太简单了,我几乎想哭,但这很棒,因为代码就像一个魅力!

所以这就是我所做的(你会笑的!):

添加到泛型类的代码

然后是一个小工具方法来检查类型并抛出异常,

然后需要做的就是在类构造函数中调用EnforcePrimitiveType()。任务完成!:-)

唯一的缺点是,它只在运行时(显然)而不是设计时抛出异常。但这没什么大不了的,可以使用FxCop之类的实用程序(我们在工作中不使用)。

在此特别感谢 Jon Limjap!

0 投票
3 回答
17307 浏览

泛型迭代器

我正在尝试找到一种访问一组容器的通用方法。除了另一个自定义列表之外,我还有一个标准向量和列表。

自定义列表定义了一个迭代器;

适当的运算符重载。

理想情况下,我想这样做;

但显然这些都是不同类型的迭代器。但是,我可以假设所有容器都是同一类型。

有没有优雅的方法来解决这个问题?

0 投票
2 回答
4059 浏览

如果可能的话,如何使用通用参数覆盖 EJB 3 会话 bean 方法?

假设您有以下 EJB 3 接口/类:

然后是另一个访问 bean 的FooRepositorybean:

FooRepository但是,当调用 bean的 delete 方法时,不会执行覆盖方法。相反,仅执行中定义的删除方法的实现AbstractRepository

我做错了什么,或者仅仅是 Java/EJB 3 的限制,泛型和继承还不能很好地结合在一起?

0 投票
7 回答
43019 浏览

迭代强类型泛型 List 的最佳方法是什么?

在 C#.NET 和 VB.NET 中迭代强类型泛型 List 的最佳方法是什么?

0 投票
15 回答
118728 浏览

在 C# 中对 IList 进行排序

所以我今天遇到了一个有趣的问题。我们有一个返回 IList 的 WCF Web 服务。在我想对其进行排序之前,这没什么大不了的。

原来 IList 接口没有内置排序方法。

我最终使用该ArrayList.Adapter(list).Sort(new MyComparer())方法来解决问题,但对我来说它似乎有点“贫民窟”。

我玩弄了编写扩展方法,也继承了 IList 并实现了我自己的 Sort() 方法以及强制转换为 List,但这些似乎都不是过于优雅。

所以我的问题是,有没有人有一个优雅的解决方案来排序 IList

0 投票
12 回答
8629 浏览

c# 中的泛型 & 访问 T 的静态成员

我的问题涉及 c# 以及如何访问静态成员......好吧,我真的不知道如何解释它(哪种对问题不好不是吗?)我会给你一些示例代码:

所以谢谢你们的回答(顺便问一下:我如何在不出错的情况下解决这个问题)。这对你来说可能是一个很简单的问题!


编辑:谢谢大家的回答!

虽然我认为 try-catch 短语是最优雅的,但根据我使用 vb 的经验,我知道它真的很糟糕。我用过一次,运行一个程序大约需要 30 分钟,后来只用了 2 分钟来计算,因为我避免了 try-catch。

这就是为什么我选择 switch 语句作为最佳答案的原因。它使代码更加复杂,但另一方面,我认为它相对较快且相对易于阅读。(虽然我仍然认为应该有更优雅的方式......也许在我学习的下一种语言中)


虽然如果您有其他建议,我仍在等待(并愿意参与)

0 投票
18 回答
4620 浏览

列表还是 BusinessObjectCollection?

在 C# 泛型之前,每个人都会通过创建一个实现 IEnumerable 的集合库来为他们的业务对象编写集合

IE:

然后会从中派生出他们的业务对象集合。

现在有了通用列表类,有没有人用它来代替?我发现我使用了两种技术的折衷方案:

我这样做是因为我喜欢使用强类型名称,而不仅仅是传递列表。

方法是什么?