gpt4 book ai didi

java - 如何将泛型类型指定为参数,例如 List/Map

转载 作者:行者123 更新时间:2023-11-29 04:57:11 25 4
gpt4 key购买 nike

我有一个以这种方式定义的通用方法:

public <T> T processGeneric(..., Class<T> type){
//do something
}

我希望这个方法尽可能通用,所以任何类型都应该被接受。

只要传递的类型是一个对象,它通常就可以工作,但是泛型类型本身呢?例如:

HashMap<String, String> result;
processGeneric(..., HashMap<String, String>.class); //this does not work

我必须使一切工作的唯一方法是将结果声明为原始类型:

HashMap result;
result = processGeneric(..., HashMap.class); //this works but gives me a warning

但是……这真的是唯一的方法吗?

我正在使用 Java-7。

最佳答案

你可以(而且你应该)避免以这种方式使用原始类型:

HashMap<String, Integer> result;
result = processGeneric(HashMap.class);

但是,您无法避免未经检查的转换(至少在不知道 processGeneric 方法主体的细节的情况下)。唯一的选择是创建自己的类型,它显式绑定(bind) HashMap 类型参数:

public class StringIntegerMap extends HashMap<String, Integer> {}

HashMap<String, Integer> result;
result = processGeneric(StringIntegerMap.class);

如果您没有那么多不同的通用参数,这可能是可以接受的。

总的来说,请记住“原始类型”警告是邪恶的,必须尽可能避免。 “未经检查的转换”警告有时是必要的邪恶,如果您知道自己在做什么就可以了。

关于java - 如何将泛型类型指定为参数,例如 List/Map<T>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33340161/

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