gpt4 book ai didi

java - 带通配符的通用 map

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

我需要为某些类存储一个对象实例。我想创建一个这样的通用 map :

<T> Map<Class<T>, T> objects;

但这是不可能的

Map<Class<?>, ?> objects;

这不是我想要的,因为我想避免转换:

MyClass c = (MyClass)objects.get(MyClass.class);

此外,我希望 Java 禁止我这样做:

objects.put(MyClass.class, new MyClass2());

一个解决方案是创建自定义 map ,这样我就有了一个通用参数 <T> , 但有没有不创建新类的解决方案?

最佳答案

标准的Map接口(interface)不适合这种场景。但是,您可以实现自己的类,该类参数化 getput 方法,将它们委托(delegate)给私有(private) Map 字段:

public class ClassObjectMap {
private Map<Class<?>, Object> map = new HashMap<>();

public <T> void put(Class<T> clazz, T value) {
assert clazz.isInstance(value);
map.put(clazz, value);
}

public <T> T get(Class<T> clazz) {
return clazz.cast(map.get(clazz));
}
}

添加其他方法,如 remove()size() 也不是很难。

关于java - 带通配符的通用 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34047224/

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