Вы не можете комментировать что-либо во время выполнения, значение элемента в аннотации Java должно быть константным выражением .
Но этот вариант использования можно решить с помощью карты multibind.
В вашем Module
, кроме просто @Bind
или @Provide
, также аннотируйте абстрактное веселье с помощью @IntoMap
и ключа карты (извините за любые ошибки в моем Kotlin)
@Binds
@IntoMap
@StringKey("p1")
abstract fun bindP1Class(p1: P1): PerformActionInterface
@Binds
@IntoMap
@StringKey("p2")
abstract fun bindP2Class(p2: P2): PerformActionInterface
Затем в вашем PerformAction
классе объявите зависимость карты от String
до PerformActionInterface
и делайте с картой все что угодно:
// map value type can be Lazy<> or Provider<> as needed
class PerformAction @Inject constructor(
val map: Map<String, @JvmSuppressWildcards PerformActionInterface>) {
fun perform(name: String) {
map.get(name)?.performAction()
// or do something if the get returns null
}
}