【发布时间】:2019-02-18 10:57:56
【问题描述】:
我正在尝试编写一个Map 构建器。其中一个构造函数将允许客户端指定他们希望构建的Map 的类型
public class MapBuilder<K, V> {
private Map<K, V> map;
/**
* Create a Map builder
* @param mapType the type of Map to build. This type must support a default constructor
* @throws Exception
*/
public MapBuilder(Class<? extends Map<K, V>> mapType) throws Exception {
map = mapType.newInstance();
}
// remaining implementation omitted
}
其意图是应该可以通过以下方式构造构建器的实例:
MapBuilder<Integer, String> builder = new MapBuilder<Integer, String>(LinkedHashMap.class);
或
MapBuilder<Integer, String> builder = new MapBuilder<Integer, String>(HashMap.class);
构造函数参数的类型签名目前似乎不支持这一点,因为上面的行导致“无法解析构造函数”编译错误。
如何更改我的构造函数,使其仅接受实现 Map 的类?
【问题讨论】:
-
为什么不改用
Supplier?这样,用户就可以通过LinkedHashMap::new,而不必担心反射。