Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 子组件与组件依赖关系_Java_Android_Dependency Injection_Dagger 2 - Fatal编程技术网

Java 子组件与组件依赖关系

Java 子组件与组件依赖关系,java,android,dependency-injection,dagger-2,Java,Android,Dependency Injection,Dagger 2,我从本文档中阅读了子组件和组件依赖项之间的差异,并阅读了本线程 有谁能举例说明这句话的意思吗 子组件可以使用其祖先组件和子组件定义的任何绑定。作为替代方案,组件只能通过声明组件依赖项来使用来自另一个组件接口的绑定。当类型用作组件依赖项时,依赖项上的每个提供方法都绑定为提供程序。请注意,只有作为提供方法公开的绑定可以通过组件依赖关系使用 将其视为一个子组件,如java子组件扩展了ParentComponent,其中所有内容都受到保护。它将访问与父对象相同的成员,并且可以使用所有父对象 另一方面,组

我从本文档中阅读了
子组件
组件依赖项之间的差异,并阅读了本线程

有谁能举例说明这句话的意思吗

子组件可以使用其祖先组件和子组件定义的任何绑定。作为替代方案,组件只能通过声明组件依赖项来使用来自另一个组件接口的绑定。当类型用作组件依赖项时,依赖项上的每个提供方法都绑定为提供程序。请注意,只有作为提供方法公开的绑定可以通过组件依赖关系使用


将其视为一个子组件,如java
子组件扩展了ParentComponent
,其中所有内容都受到
保护。它将访问与父对象相同的成员,并且可以使用所有父对象

另一方面,组件依赖项类似于委托对象,您只能访问类公开的公共方法


让我们假设Dagger可以创建并提供两个类。不管这是什么。无论您是使用构造函数注入还是从模块创建对象,这都无关紧要……我们只是假设我们有两个类,它们可以由某个
BaseComponent
提供,我将在下面展示

// some module can create either object
class ComponentPrivateObject {}
class ExposedObject {}
他们来自哪里并不重要。下一部分是有趣的部分。我们将其中一个类声明为组件接口上方法的返回类型。这就是Dagger所称的供应方法。它说这个组件可以提供这个类

@Component(modules=/* some modules */)
class BaseComponent {

  // BaseComponent can provide ExposedObject!
  ExposedObject exposedObject();

}
subcomponent和dependent component之间的区别在于,与一开始的java示例一样,
subcomponent
将访问
ComponentPrivateObject
ExposedObject
,因为它只是扩展了父图形

// can use either class, it just adds to the parent
@Subcomponent
class Subcomponent {}
另一方面,
DependentComponent
只能访问
ExposedObject
。它不扩展
BaseComponent
的图形,但它只是将
BaseComponent
绑定为某些对象的提供者。与上面的java示例类似,它使用的是它的公共API,如果您尝试使用
ComponentPrivateObject
Dagger将告诉您无法提供它

一个扩展父组件,另一个使用其公共API。

请不要“将其视为java子组件扩展父组件那样的子组件”。组件和子组件之间没有继承关系。相反,可以将它们看作是内部类(它们是以这种方式实现的),因为您可以从封闭组件访问所有内容。
// binds component dependency as provider
@Component(dependency=BaseComponent.class)
class DependentComponent{}