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

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

有人可以帮我举例说明这句话的意思。

子组件可以使用由其祖先组件和子组件定义的任何绑定。作为替代,组件可以通过声明组件依赖性来仅使用来自另一个组件接口的绑定。将类型用作组件依赖项时,依赖项上的每个提供方法都将绑定为提供程序。请注意,只有暴露为供应方法的绑定才可以通过组件依赖项获得。

参考方案

可以将它视为java SubComponent extends ParentComponent之类的子组件,其中所有内容均为protected。它可以访问与父级相同的成员,并且可以使用父级的所有东西。

另一方面,组件的依赖关系就像委托对象,在这里您只能访问类公开的公共方法。

让我们假设Dagger可以创建和提供2个类。不管是什么。不管您使用构造函数注入还是从模块创建对象都没有关系...我们只假设我们有两个BaseComponent可以提供的2个类,我将在下面显示。

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

它们来自哪里都无所谓。下一部分是有趣的部分。我们在组件接口的方法中将这些类之一声明为返回类型。这就是Dagger所谓的预配方法。它说该组件可以提供该类。

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

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

}

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

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

另一方面,DependentComponent仅有权访问ExposedObject。它不会扩展BaseComponent的图,而只是将BaseComponent绑定为某些对象的提供者。就像上面的Java示例一样,它就像使用其公共API,并且如果您尝试使用ComponentPrivateObject,则Dagger将告诉您无法提供它。

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

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

Java:BigInteger,如何通过OutputStream编写它 - java

我想将BigInteger写入文件。做这个的最好方式是什么。当然,我想从输入流中读取(使用程序,而不是人工)。我必须使用ObjectOutputStream还是有更好的方法?目的是使用尽可能少的字节。谢谢马丁 参考方案 Java序列化(ObjectOutputStream / ObjectInputStream)是将对象序列化为八位字节序列的一种通用方法。但…

Java-如何将此字符串转换为日期? - java

我从服务器收到此消息,我不明白T和Z的含义,2012-08-24T09:59:59Z将此字符串转换为Date对象的正确SimpleDateFormat模式是什么? java大神给出的解决方案 这是ISO 8601标准。您可以使用SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM…

Java:从类中查找项目名称 - java

仅通过类的实例,如何使用Java反射或类似方法查找项目名称?如果不是,项目名称(我真正想要的是)可以找到程序包名称吗? 参考方案 项目只是IDE使用的简单组织工具,因此项目名称不是类或JVM中包含的信息。要获取软件包,请使用Class#getPackage()。然后,可以调用Package#getName()将包作为您在代码的包声明中看到的String来获取…

JAVA 8具有任何匹配属性的对象的过滤器列表 - java

我的要求是通过匹配任何属性的字符串来过滤对象列表。例如,假设Contact类具有三个属性:街道,城市,电话。我知道java流过滤器是如何工作的,在这里我必须将输入字符串与每个属性进行比较,如下所示:contactList.stream().filter(contact -> contact.getStreet().equals("dubai&…

java:继承 - java

有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…