【发布时间】:2020-01-14 20:12:20
【问题描述】:
我有这种情况,我有一个多映射,我最后添加到 Oracle DB,它将空字符串(“”)转换为 null,有没有一种方法可以在代码中保证 multimap 不会允许添加一个空键? (例如 Multimap.put("", "some value"))
谢谢。
【问题讨论】:
我有这种情况,我有一个多映射,我最后添加到 Oracle DB,它将空字符串(“”)转换为 null,有没有一种方法可以在代码中保证 multimap 不会允许添加一个空键? (例如 Multimap.put("", "some value"))
谢谢。
【问题讨论】:
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 方法中。
【讨论】: