Это простой способ:
---
- name: Create user
user: name=user shell=/bin/bash home=/srv/user groups=admin,sudo generate_ssh_key=yes ssh_key_bits=2048
- name: Set password to user
shell: echo user:plain_text_password | sudo chpasswd
no_log: True
Я понял:
open class A
class B : A()
class C : A()
data class D(val map: Map<Class<out A>, String>)
@MapKey
internal annotation class MyClassKey(val value: KClass<out A>)
@Module
object ModuleA {
@JvmStatic
@Provides
@IntoMap()
@MyClassKey(B::class)
fun provideB(): String {
return "B"
}
@JvmStatic
@Provides
@IntoMap()
@MyClassKey(C::class)
fun provideC(): String {
return "C"
}
@JvmStatic
@Provides
@IntoMap()
@MyClassKey(A::class)
fun provideA(): String {
return "A"
}
@JvmStatic
@Provides
fun provideD(map: Map<Class<out A>, String>): D {
return D(map)
}
}
@Component(modules = [ModuleA::class])
@Singleton
interface ComponentA {
fun d(): D
}
fun main(args : Array<String>) {
val dagger = DaggerComponentA.builder().build()
val d = dagger.d()
println(d.map) // {class dagger.B=B, class dagger.C=C, class dagger.A=A}
}
Мне нужно было предоставить пользовательскую аннотацию @MapKey
:
@MapKey
internal annotation class MyClassKey(val value: KClass<out A>)
И изменить
fun provideD(map: Map<Class<A>, String>): D {
на [ 118]
fun provideD(map: Map<Class<out A>, String>): D {