【问题标题】:how to not allow empty key in Guava Multimap?如何在 Guava Multimap 中不允许空键?
【发布时间】:2020-01-14 20:12:20
【问题描述】:

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

谢谢。

【问题讨论】:

    标签: guava multimap


    【解决方案1】:

    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 方法中。

    【讨论】:

    • 如果没有通过 spring 解析,那会起作用的 =]
    • 啊,我明白了。那我猜你可以使用 ForwardingMultiMap 吗?将更新我的答案,因为评论太长了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-30
    • 2011-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-06
    • 2015-09-12
    相关资源
    最近更新 更多