泛型继承 +收藏+方法=问题

发布于 2024-10-02 18:32:11 字数 297 浏览 6 评论 0原文

我对泛型和集合有一些问题。 Java 仅在编译级别支持泛型。所以我们不能使用情况 B。

{
    foo(new HashSet<I>());  //case A
    foo(new HashSet<C>());  //case B: wrong
}
void foo(Set<I> set){}
class C implements I{}
interface I {}

那么我们如何将函数 foo 与 Set< 一起使用呢? C>范围?

谢谢。

I have some problem with generics and collection. Java support generics only at compilation level. So we can't use case B.

{
    foo(new HashSet<I>());  //case A
    foo(new HashSet<C>());  //case B: wrong
}
void foo(Set<I> set){}
class C implements I{}
interface I {}

So how we can use function foo with Set< C > parameter?

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

洛阳烟雨空心柳 2024-10-09 18:32:11

通过更改 Foo 的签名:

void foo(Set<? extends I> set){}

您将无法向 foo 内的集合添加值,但您将能够迭代它们或检查包含情况。

By changing the signature of Foo:

void foo(Set<? extends I> set){}

You won't be able to add values to the set within foo, but you'll be able to iterate over them or check for containment.

葮薆情 2024-10-09 18:32:11

乔恩·斯基特是对的。但是,如果您确实需要添加一些内容,您可以编写一个通用函数

public <T extends I> void foo2(Set<T> set, T added){set.add(added);}

Jon Skeet is right. If you did need to add something, however, you could write a generic function

public <T extends I> void foo2(Set<T> set, T added){set.add(added);}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文