1
+ package com.baeldung.classParameterToFunction
2
+
3
+ import org.junit.jupiter.api.Test
4
+ import kotlin.reflect.KClass
5
+ import kotlin.reflect.full.createInstance
6
+ import kotlin.test.assertEquals
7
+
8
+ class ClassParameterToFunctionUnitTest {
9
+
10
+ @Test
11
+ fun `passes class as function parameter using class reference` (){
12
+ val result = functionAcceptingClassReference(ParameterClass ::class .java)
13
+
14
+ assertEquals(" This is a method called on our class" , result)
15
+ }
16
+ @Test
17
+ fun `passes class as function parameter using kclass reference` (){
18
+ val result = functionAcceptingKClassReference(ParameterClass ::class )
19
+
20
+ assertEquals(" This is a method called on our class" , result)
21
+ }
22
+
23
+ @Test
24
+ fun `passes class as function parameter using reflection` (){
25
+ val result = functionAcceptingClassNameUsingReflection<ParameterClass >(" com.baeldung.classParameterToFunction.ParameterClass" )
26
+
27
+ assertEquals(" This is a method called on our class" , result)
28
+ }
29
+
30
+ @Test
31
+ fun `passes class as function parameter using reified parameters` (){
32
+ val result = functionAcceptingClassNameUsingReifiedParameters<ParameterClass >()
33
+
34
+ assertEquals(" This is a method called on our class" , result)
35
+ }
36
+ }
37
+
38
+ fun <T : ParameterClass > functionAcceptingClassReference (clazz : Class <T >): String {
39
+ val instance = clazz.newInstance()
40
+ return instance.parameterClassMethod()
41
+ }
42
+
43
+ fun <T : ParameterClass > functionAcceptingKClassReference (clazz : KClass <T >): String {
44
+ val instance = clazz.createInstance()
45
+
46
+ return instance.parameterClassMethod()
47
+ }
48
+ fun <T : ParameterClass > functionAcceptingClassNameUsingReflection (className : String ): String {
49
+ val clazz = Class .forName(className) as Class <T >
50
+ val instance = clazz.newInstance()
51
+
52
+ return instance.parameterClassMethod()
53
+ }
54
+
55
+ inline fun <reified T : ParameterClass > functionAcceptingClassNameUsingReifiedParameters (): String {
56
+ val instance = T ::class .java.newInstance()
57
+
58
+ return instance.parameterClassMethod()
59
+ }
60
+
61
+ class ParameterClass {
62
+
63
+ fun parameterClassMethod (): String {
64
+ return " This is a method called on our class"
65
+ }
66
+ }
0 commit comments