【问题标题】:Guice inject null check?Guice注入空检查?
【发布时间】:2014-06-02 14:45:14
【问题描述】:

我在构造函数级别使用 google guice injection。对参数进行空检查以确保它们不为空是否有意义,或者为我们注入是否有意义。顺便说一句,它是一个公共构造函数。

公共方法呢?

【问题讨论】:

    标签: java guice inject


    【解决方案1】:

    仅仅因为您在某些情况下碰巧使用 Guice 调用构造函数并不意味着禁止调用它。

    就我个人而言,我会包括无效性检查——如果您也使用番石榴,这些检查会非常简单。例如:

    import static com.google.common.base.Preconditions.checkNotNull;
    
    class Player implements SomeInterface {
        private final String name;
    
        @Inject
        Player(String name) {
            this.name = checkNotNull(name);
        }
    
        ...
    }
    

    除此之外,我希望您的一些 测试 直接调用构造函数 - 尽早发现测试中的任何错误很有用,就像其他代码一样。它还向后来出现的其他人清楚地表达了您的意图。

    【讨论】:

    • 只是想指出,在大多数情况下,@Inject-annotated 构造函数不建议使用public:code.google.com/p/google-guice/wiki/KeepConstructorsHidden
    • @TavianBarnes:好电话。将类和构造函数都设为包私有,并实现了一个接口......
    • 有趣。谢谢你们两位的cmets。我阅读了 guice 的文档 - “Guice 默认禁止 null。它会拒绝注入 null,而是以 ProvisionException 失败。如果你的类允许 null,你可以用 @Nullable 注释字段或参数”-code.google.com/p/google-guice/wiki/UseNullable所以你认为这个文档可能不正确?
    • @ND27:不,一点也不。我的意思是,仅仅因为 Guice 不会调用你的 Player 构造函数并不意味着没有其他代码会......而且最好验证它。
    猜你喜欢
    • 2012-10-29
    • 1970-01-01
    • 2012-08-10
    • 1970-01-01
    • 2017-05-28
    • 2016-09-04
    • 1970-01-01
    • 1970-01-01
    • 2021-03-04
    相关资源
    最近更新 更多