gpt4 book ai didi

java - 确保通用通配符在 Java 中匹配

转载 作者:行者123 更新时间:2023-11-30 07:09:28 25 4
gpt4 key购买 nike

所以我的理解是:

HashMap<Class<?>,List<?>> map

将允许您插入任何配对。我如何强制执行它,以便您只能插入匹配的对。例如

map.put(String.class, new Vector<String>());
map.put(Integer.class, new Vector<Integer>());

但不允许以下内容:

map.put(ClassA.class, new Vector<ClassB>()); //I want this to refuse to compile

这可能吗?

更新:感谢您到目前为止的投入。我理解抽象掉 map 插入以在两个参数之间强制执行通用类型。这将使 map 保持干净,但我如何才能向编译器保证情况就是如此。

例如这会导致编译器出错,并且似乎没有多少强制转换可以解决它(至少我已经尝试过了)

List<String> list1 = map.get(String.class);

所以我目前正在使用以下但我不太满意

List list2 = map.get(String.class);

注意,我目前不在 IDE 前,所以这是来自内存,但希望总体思路是清楚的。

最佳答案

您可以定义一个泛型类型(假设在封闭方法的范围内)并将其用作泛型 Class 和泛型 Vector 的类型(或更好的是,一个通用的 Collection)。

public <T> void method(Class<T> clazz, Collection<T> collection) {
Map<Class<T>,Collection<T>> map = new HashMap<Class<T>, Collection<T>>();
map.put(clazz, collection); //this will compile
}

您可以通过以下方式调用它:

method(String.class, new ArrayList<String>());
//or
method(String.class, new Vector<String>());

你可以注意到这个语句不能编译:

method(Integer.class, new Vector<String>());

关于java - 确保通用通配符在 Java 中匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23061313/

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