Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.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_Dagger 2 - Fatal编程技术网

Java 单子在匕首上的一种方法

Java 单子在匕首上的一种方法,java,dagger-2,Java,Dagger 2,在Dagger文档中,它显示了以下内容: @Provides @Singleton static Heater provideHeater() { return new ElectricHeater(); } 我习惯于在只存在一个类实例的类上看到单例。在方法上使用@Singleton有什么意义?即使没有Dagger,你也不会得到一个方法的实例。无论一个类实例是否为单实例,一个方法永远不会有多个实例。文件规定: 该图将使用该值的单个实例来表示其所有属性 客户 这到底是什么意思?这是否意味着每

在Dagger文档中,它显示了以下内容:

@Provides @Singleton static Heater provideHeater() {
  return new ElectricHeater();
}
我习惯于在只存在一个类实例的类上看到单例。在方法上使用@Singleton有什么意义?即使没有Dagger,你也不会得到一个方法的实例。无论一个类实例是否为单实例,一个方法永远不会有多个实例。文件规定:

该图将使用该值的单个实例来表示其所有属性 客户


这到底是什么意思?这是否意味着每次调用该方法时,它都返回完全相同的电热器实例?

您创建了一个也标有
@Singleton
的组件,并将此
@Module
赋予它,使其能够提供
电热器

@Singleton
@Component(modules = HeaterModule.class)
public interface SingletonComponent {
    Heater heater();
}
然后,您可以像往常一样使用Dagger创建该组件的实例,并调用
heater()
方法,您将始终获得相同的实例

SingletonComponent component = DaggerSingletonComponent.create();
Heater heater1 = component.heater();
Heater heater2 = component.heater();
assertThat(heater1).isSameAs(heater2); // heater1 == heater2
但是,如果它没有范围,或者您正在与不同的组件实例对话,您将得到不同的实例

SingletonComponent component1 = DaggerSingletonComponent.create();
SingletonComponent component2 = DaggerSingletonComponent.create(); // probably a bug that you have *two* of a "singleton", but i've seen it before nonetheless
Heater heater1 = component1.heater();
Heater heater2 = component2.heater();
assertThat(heater1).isNotSameAs(heater2); // heater1 != heater2

您创建一个也标有
@Singleton
的组件,并将此
@Module
赋予该组件,使其能够提供
加热器

@Singleton
@Component(modules = HeaterModule.class)
public interface SingletonComponent {
    Heater heater();
}
然后,您可以像往常一样使用Dagger创建该组件的实例,并调用
heater()
方法,您将始终获得相同的实例

SingletonComponent component = DaggerSingletonComponent.create();
Heater heater1 = component.heater();
Heater heater2 = component.heater();
assertThat(heater1).isSameAs(heater2); // heater1 == heater2
但是,如果它没有范围,或者您正在与不同的组件实例对话,您将得到不同的实例

SingletonComponent component1 = DaggerSingletonComponent.create();
SingletonComponent component2 = DaggerSingletonComponent.create(); // probably a bug that you have *two* of a "singleton", but i've seen it before nonetheless
Heater heater1 = component1.heater();
Heater heater2 = component2.heater();
assertThat(heater1).isNotSameAs(heater2); // heater1 != heater2