Код Котлина для замены автоаннотации, как это сделать? (Как создать экземпляр класса аннотаций Kotlin) - PullRequest
0 голосов
/ 23 октября 2019

Я использую AutoAnnotation в Java в соответствии с @ AutoAnnotation для Dagger 2 Учебник по связыванию не работает. Как заставить это работать?

import dagger.MapKey;

@MapKey(unwrapValue = false)
@interface MyKey {
    String name();
    Class<?> implementingClass();
    int[] thresholds();
}

import com.google.auto.value.AutoAnnotation;

public class AutoValueUtil {

    @AutoAnnotation
    static MyKey createMyKey(String name, Class<?> implementingClass, int[] thresholds) {
        return new AutoAnnotation_AutoValueUtil_createMyKey(name, implementingClass, thresholds);
    }
}

Я понимаю, что в Kotlin у нас есть класс данных, и нам не нужна помощь AutoValue. Однако MyKey будет преобразовано в Annotation Class. Как я могу создать экземпляр MyKey в Kotlin (без использования AutoAnnotation, поскольку я больше не могу его использовать)?

Моя попытка, как показано ниже

import dagger.MapKey
import kotlin.reflect.KClass

@MapKey(unwrapValue = false)
internal annotation class MyKey(val name: String, val implementingClass: KClass<*>, val thresholds: IntArray)

object AutoValueUtil {

    internal fun createMyKey(name: String, implementingClass: Class<*>, thresholds: IntArray): MyKey {
        return MyKey(name, implementingClass::class, thresholds)
    }
}

Результатом будет Annotation class cannot be instantiated

...