gpt4 book ai didi

构造函数中泛型的 Java 类型错误

转载 作者:行者123 更新时间:2023-11-30 04:43:27 26 4
gpt4 key购买 nike

我有一个关于 Java 泛型的(可能很简单)问题。我有以下类(class):

public class ValueCollection<Y> implements Collection<Y>
{
private Set<Entry<?, Y>> entries;

public ValueCollection(Set<Entry<?, Y>> entries)
{
this.entries = entries;
}
...
}

当我像这样调用构造函数时:

return new ValueCollection<V>(entries);

我收到以下编译器错误:

The constructor ValueCollection<V>(Set<Map.Entry<K,V>>) is undefined

如果我将我的类(class)更改为:

public class ValueCollection<X, Y> implements Collection<Y>
{
private Set<Entry<X, Y>> entries;

public ValueCollection(Set<Entry<X, Y>> entries)
{
this.entries = entries;
}
...
}

和我的构造函数调用:

return new ValueCollection<K, V>(this.entries());

编译错误消失。我只是想知道为什么会这样。感谢您的帮助!

最佳答案

一个Set<Entry<?, V>>是一组具有任意键类型和值类型的条目 V一组具有某些特定但未知 key 类型的条目 K和值类型V 。由于后者,编译器拒绝您原来的构造函数调用。

一个Set<? extends Entry<?, V>>是一组条目,它们是具有任何键类型和值类型的条目 V 。这正是你想要的,将你的构造函数参数类型重新定义为 Set<? extends Entry<?, V>> .

您可以使用 this.entries = Collections.unmodifiableSet(entries) 将参数分配给您的字段或this.entries = new HashSet<Entry<?, V>>(entries) 。右侧均产生 Set<Entry<?, V>>以一种让编译器信服的方式,它意味着一组具有任何键类型和值类型的条目V

关于构造函数中泛型的 Java 类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11676090/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com