Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.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
Android 匕首:第三方类可以';不需要注释吗?_Android_Dagger - Fatal编程技术网

Android 匕首:第三方类可以';不需要注释吗?

Android 匕首:第三方类可以';不需要注释吗?,android,dagger,Android,Dagger,我是新手。在它的 无法对第三方类进行注释 但在此示例中,它在main活动中注入了OTTO总线: public class MainActivity extends BaseActivity { @Inject protected Bus bus; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.

我是新手。在它的

无法对第三方类进行注释

但在此示例中,它在main活动中注入了OTTO总线:

public class MainActivity extends BaseActivity {

@Inject
protected Bus bus;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

@Override
protected void onResume() {
    super.onResume();
    registerBus();
}

@Override
protected void onPause() {
    super.onPause();
    unRegisterBus();
}

private void registerBus() {
    bus.register(this);
}

private void unRegisterBus() {
    bus.unregister(this);
}

@Subscribe
public void onItemSelectedEvent(MovieSelectedEvent event) {
    launchMovieDetailsActivity(event.getMovie());
}
所以我认为Dagger应该调用总线的默认构造函数(当然,总线构造函数中没有注入注释)。但它似乎与“第三方类不能被注释”相冲突

我认为Dagger应该调用总线的默认构造函数

如果有多个构造函数呢?它选择哪一个

Dagger不会随机创建类实例。你必须告诉它使用哪一个或自己创建它

在这种情况下,
Bus
可以使用
@Inject
构造函数进行注释。这将允许匕首在没有其他任何东西的情况下注入它。然而,奥托没有这个,所以它一定来自其他地方

另一种方法是编写提供程序方法

@Provides @Singleton Bus provideBus() {
  return new Bus();
}

此方法(写在Dagger
@模块
)中)将为Dagger提供一种获取要注入的
总线
实例的方法。由于Dagger是用
@Singleton
注释的,因此每次请求该实例时,Dagger只会调用该方法一次,并反复使用该实例。

执行此操作时是否会出错?不,它可以在android studio中成功编译和运行。工作完美……我认为这意味着你不能注释第三方类的构造函数(因为你不能修改源代码)。