gpt4 book ai didi

java - 如何声明具有变量泛型的映射?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:42:11 26 4
gpt4 key购买 nike

我有一个 Map其键是通用类型 Key<T> , 值的类型是 List<T> .如果键是 Key<String> 的一个实例, 该值必须是 List<String> ,并且相同的规则适用于任何其他键值对。我尝试了以下但它没有编译:

Map<T, List<T>> map;

目前我必须用“部分”泛型声明它:

Map<Object, List> map;

我知道这很糟糕,但我目前没有更好的选择。在这种情况下是否可以使用泛型?

更新

可能我没有表达清楚我的问题。我想要一张能够:

map.put(new Key<String>(), new ArrayList<String>());
map.put(new Key<Integer>(), new ArrayList<Integer>());

下面的代码不应该编译:

map.put(new Key<String>(), new ArrayList<Integer>());

键和值应该始终具有相同的泛型,而泛型可以是任意的,显然扩展映射不符合我的要求。

最佳答案

我不知道有任何现有的库可以精确地执行此操作,但您自己实现起来并不难。过去我做过几次类似的事情。您不能使用标准的 Map 接口(interface),但可以使用内部的 HashMap 来实现您的类。首先,它可能看起来像这样:

public class KeyMap {
public static class Key<T> { }

private final HashMap<Object,List<?>> values = new HashMap<Object,List<?>>();

public <T> void put(Key<T> k, List<T> v) {
values.put(k, v);
}

public <T> List<T> get(Key<T> k) {
return (List<T>)values.get(k);
}

public static void main(String[] args) {
KeyMap a = new KeyMap();
a.put(new Key<String>(), new ArrayList<String>());
a.get(new Key<Integer>());
}
}

关于java - 如何声明具有变量泛型的映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11498069/

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