Kotlin отрази пакет и получи все классы - PullRequest
0 голосов
/ 27 января 2020

Как можно отразить пакет и перечислить все классы как KClass <*>?

fun listAllClassesInPackage(pack: String): List<KClass<*>> = ...
fun main(args: Array<String>) {
    val classes: List<KClass<*>> = listAllClassesInPackage("com.example")
    classes.forEach { k ->
        println(k)
    }
}

1 Ответ

0 голосов
/ 28 января 2020

Вот мое решение.

package com.example

import org.reflections.Reflections
import org.reflections.scanners.ResourcesScanner
import org.reflections.scanners.SubTypesScanner
import org.reflections.util.ClasspathHelper
import org.reflections.util.ConfigurationBuilder
import org.reflections.util.FilterBuilder

class Test1

fun op1() = ""

fun main(args: Array<String>) {
    val packagePath = "com.example"
    val reflections =
        Reflections(
            ConfigurationBuilder()
                .filterInputsBy(FilterBuilder().includePackage(packagePath))
                .setUrls(ClasspathHelper.forPackage(packagePath))
                .setScanners(SubTypesScanner(false))
        )
    val typeList = reflections.getSubTypesOf(Object::class.java)
    typeList.forEach { c ->
        println(c.kotlin)
    }
}
...