guava - 如何在 Guava Multimap 中不允许空键?
问题描述
我有这种情况,我有一个多映射,我最后添加到 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
方法中。
推荐阅读
- java - 抛出和捕获异常的影响大吗?
- javascript - 将数组对象转换为所需格式的对象数组
- react-native - 我如何在堆栈导航中导航屏幕
- activemq-artemis - 只有当它们仍然在 ActiveMQ Artemis 和 JBoss EAP 7.1 中排队时才丢弃重复消息
- javascript - 查询数据库后如何重新渲染组件
- c# - 是否可以为不应该使用默认授权策略的控制器操作添加例外?
- python - python ftp 从客户端回调服务器函数
- swift - DatePicker 在 SwiftUI 中使用时间间隔
- android - 如何在后台android拨打电话
- python - 如何通过 Python 中的 argparse 模块打印多行版本文本?