gpt4 book ai didi

java - 子组件与组件依赖关系

转载 作者:行者123 更新时间:2023-12-02 10:51:39 25 4
gpt4 key购买 nike

我从此文档中阅读了 SubComponentsComponent Dependency 之间的区别 https://google.github.io/dagger/api/latest/dagger/Component.html并阅读此线程Dagger 2 subcomponents vs component dependencies

任何人都可以通过示例帮助我了解这行代码的含义。

SubComponents may use any binding defined by their ancestor component and subcomponents. as an alternative, components can use bindings only from another component interface by declaring a component dependency. When a type is used as a component dependency, each provision method on the dependency is bound as a provider. Note that only the bindings exposed as provision methods are available through component dependencies.

最佳答案

将其视为一个子组件,例如 java SubComponent 扩展 ParentComponent,其中所有内容都受到保护。它将有权访问与父级相同的成员,并且只能使用父级的所有内容。

另一方面,组件依赖关系就像委托(delegate)对象,您只能访问该类公开的公共(public)方法。

<小时/>

假设我们有 2 个 Dagger 可以创建和提供的类。不管这可能是什么。如果您使用构造函数注入(inject)或从模块创建对象并不重要...我们只是假设我们有这两个类可以由某些 BaseComponent 提供,我将在接下来展示。

// some module can create either object
class ComponentPrivateObject {}
class ExposedObject {}

他们来自哪里并不重要。下一部分是有趣的部分。我们将这些类中的一个声明为组件接口(interface)上方法的返回类型。这就是 Dagger 所说的“配置方法”。它表示该组件可以提供该类。

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

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

}

子组件和依赖组件之间的区别在于,与开头的 java 示例一样,Subcomponent 将有权访问 ComponentPrivateObjectExposedObject code> 因为它只是扩展父图。

// can use either class, it just adds to the parent
@Subcomponent
class Subcomponent {}

另一方面,DependentComponent 只能访问ExposedObject。它不会扩展 BaseComponent 的图,但它只是将 BaseComponent 绑定(bind)为某些对象的提供者。与上面的 java 示例一样,它就像使用其公共(public) API,如果您尝试使用 ComponentPrivateObject,Dagger 会告诉您它无法提供...

// binds component dependency as provider
@Component(dependency=BaseComponent.class)
class DependentComponent{}

一个扩展父级,另一个使用其公共(public) API。

关于java - 子组件与组件依赖关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46042273/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com