我们知道java的多态支持声明一个父类对象,然后实例化一个子类对象赋值给它
但是Dagger并不支持这种多态,我们可以写个例子验证下,直接上代码
1 | public interface Person { |
1 | public class Student implements Person { |
1 |
|
1 | public class MainActivity extends AppCompatActivity { |
直接运行下,结果无法编译通过,报如下错误
1 | error: [Dagger/MissingBinding] com.him.hisapp.Person cannot be provided without an @Provides-annotated method. |
计时用Modele也是没用的
1 |
|
除非我们将Modele中providePerson方法返回类型明确声明为父类Person
1 |
|
其实很容易知道为什么Dagger依赖注入不支持多态的原因,我们假设需要注入一个Object的对象,而项目中如果有很多@Inject标识的构造方法,这些构造方法生成的对象都是Object的子类对象,那么Dagger就不知道要注入哪一个,就无法编译通过。