gpt4 book ai didi

java - 如何使用通配符将泛型传递给函数而不进行强制转换?

转载 作者:行者123 更新时间:2023-12-01 19:05:16 25 4
gpt4 key购买 nike

这是我的问题:我在 A 类中的函数:

public void setData(Map<String,? extends ArrayList<? extends SomeInterface>>){...}

我的电话:

Map<String, ArrayList<ImplementsSomeInterface>> a=...;
instanceOfA.setData(a); //does not compile
instanceOfA.setData((Map<String,? extends ArrayList<? extends SomeInterface>>) a); // works thanks to the Casting.

我认为这不干净。有没有办法避免转换而不放弃函数中通配符的使用?

最佳答案

首先,您的 setData 方法应为:

public void setData(Map<String,? extends List<? extends SomeInterface>>)

您的 map 声明应为:

Map<String, List<ImplementsSomeInterface>> a = ...;

这几乎就是您对原始问题进行编辑后得到的结果。我从 ArrayListList 所做的更改不会影响代码的行为。

以下评论:

public static void main() 
{
Map<String, List<Double>> map = new HashMap<String, List<Double>>();
map.put("prices", new ArrayList<Double>(Arrays.asList(1.1, 2.2, 3.3)));

setData(map);
}

public static void setData(Map<String,? extends List<? extends Serializable>> map)
{
}

关于java - 如何使用通配符将泛型传递给函数而不进行强制转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10334563/

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