¿Hay alguna forma de obtener solo los miembros declarados de una clase (no heredados) con Kotlin Reflection?
Algo equivalente a getDeclaredMethods() , o ...Fields() , en Java, pero para miembros y JVM free , que:
Devuelve una matriz que contiene objetos Método que reflejan todos los métodos declarados de la clase... pero excluyendo los métodos heredados .
O como un indicador vinculante, como BindingFlags.DeclaredOnly de dotnet.
Debido a que la reflexión se basa en la clase, lo siguiente es solo para kotlin/JVM, no apto para Kotlin/JS o Kotlin/Native.
Para Kotlin/JS admite límite, para más detalles, puede ver este documento
Las únicas partes admitidas de la API son: (::class),KType y typeOf
En primer lugar, puede usar SomeClass::class.java.declaredMethods para obtener getDeclaredMethods. Ese es el método java. Porque el archivo Kotlin después de compilarlo sigue siendo una clase. para que puedas usarlo directamente.
También puede agregar el reflejo de kotlin para obtener el KClass, luego use las funciones declaredFunctions para obtener. Aquí está el Documento
Devuelve todas las funciones declaradas en esta clase. Si se trata de una clase Java, incluye todos los métodos no estáticos (tanto extensiones como no extensiones) declarados en la clase y las superclases, así como métodos estáticos declarados en la clase.
Para obtener la KClass, puede usar el siguiente código
Class.forName("mypackage.MyClass").kotlin.declaredFunctionsAdemás del método, la otra propiedad también la puedes obtener. tal como
Devuelve todas las funciones y propiedades declaradas en esta clase. No incluye miembros declarados en supertipos.
Devuelve todas las funciones declaradas en esta clase, incluidos todos los métodos no estáticos declarados en la clase y las superclases, así como los métodos estáticos declarados en la clase.
puede leer el documento usándolo.