gpt4 book ai didi

java - 创建一个映射/缓存,它将使用默认构造函数生成的对象作为新键

转载 作者:行者123 更新时间:2023-12-01 18:58:40 24 4
gpt4 key购买 nike

我正在计算按属性分组的统计数据。对于此属性的每个类别(以 String 形式给出),我得到了想要聚合的值。

为此,我需要一个从类别到 DescriptiveStatistics 的映射(由 org.apache.commons.math.stat.descriptive 提供)。在此 map 中,我必须检查对于给定类别,是否已创建相应的 DescriptiveStatistics此检查以及新DescriptiveStatistics的创建应由 map 完成。

我测试了 Apache 的 LazyMap,但非通用性让我转向了 Guava 的 LoadingCache。这些内容对我有用:

LoadingCache<String, DescriptiveStatistics> groupedStats =
CacheBuilder.newBuilder()
.build(new CacheLoader<String, DescriptiveStatistics>() {
@Override
public DescriptiveStatistics load(String key) {
return new DescriptiveStatistics();
}
});

有没有更“啰嗦”的解决方案?不需要我仅仅为了实例化对象而抛出一个匿名类?

最佳答案

您的原始代码正是 Guava 团队希望您编写的代码。

我们倾向于避免反射(当然,在 com.google.common.reflect 中除外)。它往往很脆弱,并且失去了编译时检查的好处——如果特定的类没有公共(public)无参数构造函数,并且您使用了 clazz.newInstance() ,直到运行时你才会发现这一点。编写直接实现可能会花费您一两行代码,但我们认为这样做的好处是值得的。

关于java - 创建一个映射/缓存,它将使用默认构造函数生成的对象作为新键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13094641/

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