在dagger 2的最新版本中,一个改进是拥有静态提供方法的可能性。简单来说:
@Provides
static A providesA() {
return A();
}
我想知道如何在kotlin中做到这一点?我试过了。
@Module
class AModule {
companion object {
@JvmStatic
@Provides
fun providesA(): A = A()
}
}
但我收到错误消息:
@Provides methods can only be present within a @Module or @ProducerModule
我猜伴随对象发生了一些事情,但是我对静态编程语言很陌生,我不确定如何做到这一点。这可能吗?
谢谢!
现在Dagger2(2.26版)支持@Module
中的伴随对象
在kotlin中带有thourh@Module和@JvmStatic注释的注释类
更好地支持@Module注释类的Kotlin伴随对象中的绑定声明。
将dagger依赖项更新到2.26版本为
def dagger_version = "2.26"
//dagger
implementation "com.google.dagger:dagger:$dagger_version"
kapt "com.google.dagger:dagger-compiler:$dagger_version"
//If you're using classes in dagger.android you'll also want to include:
implementation "com.google.dagger:dagger-android:$dagger_version"
implementation "com.google.dagger:dagger-android-support:$dagger_version"
kapt "com.google.dagger:dagger-android-processor:$dagger_version"
所以现在你可以用
@Module
class AModule {
companion object {
@Provides
fun providesA(): A = A()
}
}
重要提示:很快,在@Module
类中的伴随对象
上添加@Module
将引发错误。
注意:为了向后兼容,我们仍然允许伴侣对象上的@Module和提供方法上的@JvmStatic。但是,伴侣对象上的@Module现在是禁止操作的,它的所有属性(例如“包含”)都将被忽略。在未来的版本中,我们
将在伴侣对象上使用@Module作为错误。
我现在还不能测试,但是我想这个应该可以:
@Module
object AModule {
@JvmStatic
@Provides
fun providesA(): A = A()
}
虽然我认为zsmb13的解决方案更好,但我发现了另一个有效的解决方案
@Module
class AModule {
@Module
companion object {
@JvmStatic
@Provides
fun providesA(): A = A()
}
// add other non-static provides here
}
但是,请注意,对于带有对象的情况,将生成两个类:AModule_ProvidesAFactory
和AModule_Companion_Provides AFactory
AModle_ProvideseAFactory类,而不是带有伴生对象的类
我有一个测试班和测试方法。这取决于数据提供程序方法。数据提供程序方法位于不同的类中,而不是测试类或其基类之一。根据TestNG文件 如果要将数据提供程序放在不同的类中,则它需要是静态方法或具有非参数构造函数的类,并且指定可以在dataProviderClass属性中找到它的类 测试类: 数据提供程序类: Eclipse的测试输出: 它似乎不起作用。我正在使用TestNG 6.9.11并尝试从mav
问题内容: 可以说我有: 我有一个 ApplicationModule ,它需要为 Rec 和 Circle 提供实例: 和 ApplicationComponent : 以这种方式使用代码-无法编译。错误说 错误:(33,20)错误:形状被绑定多次。 对我来说,这是不可行的,因为该组件正试图找到一个实例,并且它找到了两个实例,因此它不知道要返回哪个实例。 我的问题是-我该如何处理? 问题答案:
关于这一高级话题,请先阅读提供者状态一节的介绍。 当按照以下形式来阅读时,提供者状态中的文本应该具有足够的可读性(自动生成的文档是按这样的形式展示的): Given an alligator with the name Mary exists * Upon receiving a request to retrieve an alligator by name ** from Some Consu
契约中的各个交互应该是在互相隔离状态下进行验证的,不得持有前一个交互中的上下文。依赖于之前测试产出结果的测试将会是脆弱的,而且会将你重新陷入到集成测试的泥潭中,而这正是想通过使用契约测试来极力摆脱的困境。 那么怎样测试那些依赖于提供者中已存在的数据的请求呢?提供者状态允许你在交互发生前就可以向数据源注入数据,实现对提供者预置数据,这样就可以生成与消费者期望相匹配的响应了。消费者状态的名字是在消费者
本文向大家介绍Kotlin实现静态方法,包括了Kotlin实现静态方法的使用技巧和注意事项,需要的朋友参考一下 工具类 全都是静态方法的情况 : class 类名 改为 object 类名 即可 普通静态方法 一部分是静态方法的情况 : 将方法用 companion object { } 包裹即可 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
我希望能够将类实例保存到公共静态变量中,但我不知道如何在Kotlin中做到这一点。