gpt4 book ai didi

java - 泛型通配符无法转换为泛型类型

转载 作者:行者123 更新时间:2023-12-02 03:37:23 31 4
gpt4 key购买 nike

我遇到了一个无法找到解决方案的问题。

我经常使用映射,其中键和值是具有匹配泛型类型的对象。对于每一对,泛型应该匹配。尽管条目之间的通用类型可能有所不同。 (为了清楚起见,我将提供一个示例)。这可以通过使用通配符轻松完成。但正因为如此,您不能将键或值相互组合使用。

考虑底部包含的示例。没有(简单)方法可以修改映射以遇到强制转换异常。尽管我仍然无法像我在 useEntries() 中尝试的那样使用 map 。所以我的问题是,有解决方法吗?提前致谢!

public class GenericWildcardTest
{
static Map<GenericObject<?>, Function<?, ?>> map = new HashMap<>();

public static <S> void put(GenericObject<S> genericObject, Function<S, S> function)
{
map.put(genericObject, function);
}

public static void useEntries()
{
for(Entry<GenericObject<?>, Function<?, ?>> currentEntry : map.entrySet())
//The #apply(); part simply wont compile because of cast errors.
currentEntry.getKey().set(currentEntry.getValue().apply(currentEntry.getKey().get()));
}



// Simple Object with generic.
static class GenericObject<T>
{
private T object;

public GenericObject(T object)
{
this.object = object;
}

public void set(T object)
{
this.object = object;
}

public T get()
{
return this.object;
}
}
}

最佳答案

以下是如何通过强制转换来做到这一点:

@SuppressWarnings("unchecked")
public static <S> void useEntries() {
for(Entry<GenericObject<?>, Function<?, ?>> currentEntry : map.entrySet()) {
GenericObject<S> key = (GenericObject<S>)currentEntry.getKey();
Function<S, S> value = (Function<S, S>)currentEntry.getValue();
key.set(value.apply(key.get()));
}
}

此答案假设您的 map 确实包含 Function<S, S> ,不是Function<GenericObject<S>, S> .

关于java - 泛型通配符无法转换为泛型类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37284789/

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