Класс обнаружения kotlin или java - PullRequest
2 голосов
/ 12 апреля 2020

Моя библиотека находится в java. И некоторые из них, мне нужно знать тип класса. Есть ли выход в java?

Является ли класс Java или Kotlin?

Ответы [ 2 ]

4 голосов
/ 12 апреля 2020

Классы, сгенерированные компилятором Kotlin, имеют аннотацию kotlin .Metadata, которую можно прочитать по отражению: https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-metadata/

0 голосов
/ 12 апреля 2020

Полагаю, вы могли бы использовать несколько эвристик и подходов для получения правильного имени исходного файла. Можно было бы прочитать файл .class напрямую и получить оттуда имя исходного файла:

    ClassReader cr = new ClassReader(this.getClass().getName()); // Just so that we have some class to read here.
    ClassNode cn = new ClassNode();
    cr.accept(cn, ClassReader.SKIP_FRAMES | ClassReader.SKIP_CODE);
    LOGGER.info("class {} source file: {}", cn.name, cn.sourceFile);

В приведенном выше примере используется ASM .

Другой может быть возврат к чему-то вроде @kotlin.Metadata аннотации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...