我有一个如下所示的接口(interface)和类:
public interface Message extends Wrappable
{
}
public class MessageImpl implements Message
{
}
我想使用 Java 泛型将这些类存储到一个 Map 中,其中接口(interface)为键,impl 为值:
map.put(Message.class, MessageImpl.class);
我希望它是类型安全的,其中键必须扩展 Wrappable,值必须扩展键类。 有什么帮助吗?
最佳答案
基本的 Map
无法安全地执行此类型,但您可以在 Map
周围创建一个简单的包装器以强制类型安全。这可能看起来像
class MyMap {
private final Map<Class<?>, Class<?>> map = new HashMap<>();
public <A extends Wrappable, B extends A> void put(
Class<A> interfaceClass, Class<B> implClass) {
// you can't statically enforce that A is an interface
// and B is a concrete class, though you can do it at runtime
assert interfaceClass.isInterface();
assert !Modifier.isAbstract(implClass.getModifiers());
map.put(interfaceClass, implClass);
}
public <A extends Wrappable> Class<? extends A> get(Class<A> interfaceClass) {
return (Class<? extends A>) map.get(interfaceClass);
}
}
关于java - 在 Map 中存储抽象类型和具体类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33677816/