gpt4 book ai didi

java - HashMap<类, 列表<类>> : specify that the lists' classes extend the keys'

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

我的一个类需要根据它们的父类(super class)来存储类。为此,我使用了一个 HashMap,其中键是父类(super class),值是它们的扩展类的列表。所以它看起来像这样:

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

我想知道是否有一种符号可以让我更精确,比如:

HashMap<Class<T>, List<Class<? extends T>>>

我试过了,当然,它不起作用:T 无法解析。是否有允许我这样做的语法?预先感谢您的帮助。

最佳答案

您可以使用访问器方法来做到这一点。

// only accessed by methods which check the keys and values are the right type.
final Map<Class, List<Class>> map = new LinkedHashMap<Class, List<Class>>();

public <T, S extends T> void add(Class<T> key, Class<S> value) {
List<Class> list = map.get(key);
if (list == null)
map.put(key, list = new ArrayList<Class>());
list.add(value);
}

public <T, S extends T> List<Class<S>>get(Class<T> key) {
return (List<Class<S>>) map.get(key);
}

public <T, S extends T> boolean contains(Class<T> key, Class<S> value) {
List<Class> list = map.get(key);
if (list == null) return false;
return list.contains(value);
}

public static void main(String... args) {
Main m = new Main();
m.add(Number.class, Integer.class); // compiles
m.add(Number.class, String.class); // does not compile.
}

关于java - HashMap<类<?>, 列表<类<?>>> : specify that the lists' classes extend the keys',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8184049/

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