当前位置: 首页 > 面试题库 >

将通用Class参数限制为实现Map的类

屠晟睿
2023-03-14
问题内容

我正在尝试编写一个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而不是Class

public MapBuilder(Supplier<? extends Map<K, V>> supplier) {
    map = supplier.get();
}

然后可以这样称呼它:

MapBuilder<Integer, Integer> builder = new MapBuilder<>(LinkedHashMap::new);

这也更安全,因为a Class<Map> 可能没有默认构造函数,这将引发错误(代码响应性不强)



 类似资料:
  • 我有一个用例,我需要限制可以作为查询参数传递的值。 在上面的例子中,我想限制可以通过API传递给的查询参数的值。 是否有任何现有的CXF注释,我可以用来限制参数上的值?我没有找到任何,所以我尝试了以下解决方案。 我的方法: 修改后的界面如下所示。 我写了一个CXF拦截器来拦截应用编程接口的调用。我使用反射来获取params的句柄。但是我面临的问题是拦截器查看了Fooimpl.get的Foo细节方法

  • 实施限制 授权,实质上是关于限制。 基于某些检查,用户可能受到限制。 限制可以在以下两个地方之一中应用: 在RADIUS服务器上 在NAS 当访问请求数据包发送到RADIUS服务器时,在身份验证过程中确定限制。 Accounting-Request数据包不会也不能确定限制。 当在RADIUS服务器上应用限制时,服务器返回一个Access-Reject数据包,该数据包应该包含一个Reply-Mess

  • 问题内容: 最近,一位通讯员提到了Python 2.6中的新增功能,指出典型的浮点实现本质上是实数的有理近似。出于好奇,我不得不尝试π: 由于Arima,我没有看到更准确的结果使我感到有些惊讶: 例如,此代码: 产生以下输出: 当然,考虑到64位浮点数提供的精度,结果是正确的,但是这使我提出了一个问题:我如何才能找到有关的实现局限性的更多信息?感谢您的指导。 附加链接:Stern-Brocot树和

  • 如何将的模板参数限制为

  • CMAP~ Map 地图类 new Map(options) → {Map} 构造函数 Parameters: Name Type Description options Object 参数列表 Properties Name Type Description type String 类型'Map' terrainUrl String 地形服务url,如果不传就不加地形,目前地形必须在map初始化

  • 问题内容: 我有类别清单。我需要排除2,3行的类别列表。我们可以通过使用条件和限制来通过hibernate来实现吗? 问题答案: 您的问题尚不清楚。假设“类别”是根实体,而“ 2,3”是id(或类别的某些属性的值),则可以使用以下方法排除它们: 可以使用进行相同操作。