如何在Kotlin中注入var?

Ral*_*ann 4 java android kotlin dagger-2

我尝试将Dagger2实现到我的Kotlin项目中,但是我对@Inject注释有问题.

在Java中它看起来像这样,这工作正常:

public class FooActivity extends Activity {

    @Inject
    @Named("accessTokenObservable")
    public Flowable<Optional<AccessToken>> accessTokenObservable;

    @Override
    protected void onCreate(@Nullable final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        App.getGraph().inject(this);
    }
}
Run Code Online (Sandbox Code Playgroud)

但我怎么@Inject在Kotlin 写这条线?

当我使用这个时:

@Inject
@Named("accessTokenObservable")
var accessTokenObservable: Flowable<Optional<AccessToken>>? = null
Run Code Online (Sandbox Code Playgroud)

我收到此错误消息:

Error:Dagger does not support injection into private fields
Run Code Online (Sandbox Code Playgroud)

如果我使用lateinit:

@Inject
@Named("accessTokenObservable")
lateinit var accessTokenObservable: Flowable<Optional<AccessToken>>
Run Code Online (Sandbox Code Playgroud)

我收到此错误消息:

Error:Flowable<Optional<AccessToken>> cannot be provided without
an @Provides- or @Produces-annotated method.
Run Code Online (Sandbox Code Playgroud)

在Kotlin注入一些东西的正确语法是什么?

Tub*_*uby 11

我只是用

@Inject
lateinit var presenter: ItemsPresenter

override fun onCreate(savedInstanceState: Bundle?) {
    AndroidInjection.inject(this)
    super.onCreate(savedInstanceState)
    ...
}
Run Code Online (Sandbox Code Playgroud)

没有任何问题


Moh*_*ini 4

您必须像这样更改注入代码:

@field:[Inject Named("accessTokenObservable")]
lateinit var accessTokenObservable: Flowable<Optional<AccessToken>>
Run Code Online (Sandbox Code Playgroud)

,并且它将被修复。