1
+ package com.baeldung.getFieldNamesWithReflection
2
+
3
+ import org.junit.jupiter.api.Assertions.assertEquals
4
+ import org.junit.jupiter.api.Test
5
+ import kotlin.reflect.KClass
6
+ import kotlin.reflect.KProperty
7
+ import kotlin.reflect.KProperty1
8
+ import kotlin.reflect.KVisibility
9
+ import kotlin.reflect.full.declaredMemberProperties
10
+ import kotlin.reflect.full.memberProperties
11
+
12
+ open class Human (val gender : String )
13
+
14
+ abstract class Identifiable (open val id : Int )
15
+ class TestClass (val name : String , val age : Int , override val id : Int ): Identifiable(id)
16
+
17
+ class Person (val name : String , val age : Int ): Human(" male" ) {
18
+ }
19
+
20
+ class GetAllFieldsUsingReflectionUnitTest {
21
+
22
+ @Test
23
+ fun `obtain all field names using declaredMemberProperties method` () {
24
+ val fieldNames = getAllFieldNamesUsingDeclaredMemberPropertiesMethod(TestClass ::class )
25
+ assertEquals(listOf (" age" ," id" , " name" ), fieldNames)
26
+ }
27
+
28
+ @Test
29
+ fun `obtain all field names using member method` () {
30
+ val fieldNames = getAllFieldNamesUsingMembersProperty(TestClass ::class )
31
+ assertEquals(listOf (" age" ," id" , " name" ), fieldNames)
32
+ }
33
+
34
+ @Test
35
+ fun `obtain all field names using java reflection API` () {
36
+ val fieldNames = getAllFieldNamesUsingJavaReflection(TestClass ::class )
37
+ assertEquals(listOf (" name" , " age" , " id" ), fieldNames)
38
+ }
39
+
40
+ @Test
41
+ fun `obtain all field names using Class members property ` () {
42
+ val fieldNames = getAllFieldNamesUsingClassMemberProperties(TestClass ::class )
43
+ assertEquals(listOf (" age" ," id" , " name" ), fieldNames)
44
+ }
45
+ @Test
46
+ fun `show difference between declaredMemberProperties and memberProperties property` () {
47
+ val declaredProperties = getAllFieldNamesUsingDeclaredMemberPropertiesMethod(Person ::class )
48
+ val allProperties = getAllFieldNamesUsingClassMemberProperties(Person ::class )
49
+
50
+ assertEquals(listOf (" age" , " name" ), declaredProperties)
51
+ assertEquals(listOf (" age" , " name" , " gender" ), allProperties)
52
+ }
53
+ }
54
+
55
+ fun getAllFieldNamesUsingDeclaredMemberPropertiesMethod (clazz : KClass <* >): List <String > {
56
+ return clazz.declaredMemberProperties
57
+ .map { it.name }
58
+ }
59
+ fun getAllFieldNamesUsingJavaReflection (clazz : KClass <* >): List <String > {
60
+ return clazz.java.declaredFields
61
+ .map { it.name }
62
+ }
63
+
64
+ fun getAllFieldNamesUsingMembersProperty (clazz : KClass <* >): List <String > {
65
+ return clazz.members
66
+ .filter { it is KProperty <* > }
67
+ .map { it.name }
68
+ }
69
+ fun getAllFieldNamesUsingClassMemberProperties (clazz : KClass <* >): List <String > {
70
+ return clazz.memberProperties
71
+ .map { it.name }
72
+ }
0 commit comments