Skip to content

Commit a78ec2a

Browse files
[KTLN-546] Passing a Class to a Function in Kotlin (#834)
* added unit tests * added unit tests * code refactor
1 parent 8c48245 commit a78ec2a

File tree

3 files changed

+86
-0
lines changed

3 files changed

+86
-0
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<modelVersion>4.0.0</modelVersion>
6+
<artifactId>core-kotlin-advanced-3</artifactId>
7+
<name>core-kotlin-advanced-3</name>
8+
<packaging>jar</packaging>
9+
10+
<parent>
11+
<groupId>com.baeldung</groupId>
12+
<artifactId>core-kotlin-modules</artifactId>
13+
<version>1.0.0-SNAPSHOT</version>
14+
</parent>
15+
16+
<dependencies>
17+
18+
</dependencies>
19+
</project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
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+
}

core-kotlin-modules/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
<module>core-kotlin-10</module>
2828
<module>core-kotlin-advanced</module>
2929
<module>core-kotlin-advanced-2</module>
30+
<module>core-kotlin-advanced-3</module>
3031
<module>core-kotlin-annotations</module>
3132
<module>core-kotlin-arrays</module>
3233
<module>core-kotlin-arrays-2</module>

0 commit comments

Comments
 (0)