Skip to content

Commit 02d8d97

Browse files
[KTLN-799] Getting All Field Names of a Class Using Kotlin Reflection (#873)
* added unit test * code fixes * code fixes
1 parent b82c623 commit 02d8d97

File tree

1 file changed

+72
-0
lines changed

1 file changed

+72
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
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

Comments
 (0)