首页 > 解决方案 > 如何在 Guava Multimap 中不允许空键?

问题描述

我有这种情况,我有一个多映射,我最后添加到 Oracle DB,它将空字符串(“”)转换为 null,有没有一种方法可以在代码中保证 multimap 不允许添加空键?(例如 Multimap.put("", "some value"))

谢谢。

标签: guavamultimap

解决方案


Guava 的 MultiMap 的键和值都是 @Nullable 并且它没有开箱即用的功能来添加验证。所以我只会在放置值的代码中建立一个验证。就像是:

if (!key.isEmpty){
    multiMap.put(key, value);
} else {
    log("Could not add " +value) // or throw an exception or do something else
}

更新:在 OP 澄清上述不适用于他的用例之后,因为解析是通过 Spring 完成的。

您可以考虑使用 ForwardingMultiMap:

将其所有方法调用转发到另一个多图的多图。子类应覆盖一个或多个方法,以根据装饰器模式根据需要修改支持多图的行为。默认方法警告:此类不会将调用转发到默认方法。相反,它继承了它们的默认实现。当这些实现调用方法时,它们会调用 ForwardingMultimap 上的方法。

https://guava.dev/releases/23.0/api/docs/com/google/common/collect/ForwardingMultimap.html

我自己从未使用过这个类,但听起来你可以用它来转发到你自己设计的子类。然后在该子类中,您可以将验证构建到put方法中。


推荐阅读