嗨,我对Android有一个非常简单的匕首问题。
class Fooz {
@Inject Foo1 mFoo1;
public Fooz() {
....
}
}
class Fooz {
private Foo1 mFoo1;
@Inject public Fooz(Foo1 foo1) {
mFoo1 = foo1;
}
}
两个类如何相同? 第一个直接注入Foo1字段,而第二个在构造函数中分配mFoo1。 对于第二个对象,Fooz一创建并添加到对象图后,就从对象图注入Foo1吗? 如果不同,为什么呢? 谢谢!
答案 0 :(得分:0)
当使用依赖注入来注入Fooz时,这些类的行为相同。但是,当使用您定义的Constructor进行构造时,它们的行为会有所不同。
示例1.调用新的Fooz()将导致mFoo1为空。
示例2。调用新的Fooz(foo1)将导致mFoo1初始化为foo1。
首选的方法(个人观点)是在构造函数上使用依赖项注入批注,因为它将避免空指针异常,如在示例1和示例2进行比较时所解释的。此外,当构造类测试为您可以轻松地提供模拟。
这是具有更好描述的声纳法则,解释了我提到的https://sonarcloud.io/coding_rules?open=squid%3AS3306&rule_key=squid%3AS3306。
答案 1 :(得分:0)
构造函数注入使您可以更好地控制对象实例化,因为使用字段注入意味着将类创建限制为反射,并依赖对这些特定注入注释的支持。除此之外,在构造函数上具有明确的依赖性使代码更易于维护和测试。
据我所知,它在匕首图上的保存方式没有什么区别,但构造函数调用总是比注入字段快。
我认为,例如,Activities
和Fragments
中,我们在无法控制对象创建的情况下应该使用属性。