Sometimes you write code in Kotlin but want to use it in Java. Calling Kotlin from Java lets you mix both languages easily.
Calling Kotlin from Java
KotlinClass kotlinObject = new KotlinClass(); kotlinObject.kotlinFunction();
From Java, you create Kotlin class instances like normal Java objects.
Kotlin functions and properties are accessed like Java methods and fields.
public class JavaCaller { public static void main(String[] args) { KotlinGreeter greeter = new KotlinGreeter(); System.out.println(greeter.greet("Alice")); } }
public class JavaCaller { public static void main(String[] args) { int sum = KotlinMathKt.add(3, 5); System.out.println("Sum is: " + sum); } }
This example shows a Kotlin class with a greet function. The Java class creates an object of KotlinGreeter and calls greet to print a message.
/* Kotlin file: KotlinGreeter.kt */ class KotlinGreeter { fun greet(name: String): String { return "Hello, $name!" } } /* Java file: JavaCaller.java */ public class JavaCaller { public static void main(String[] args) { KotlinGreeter greeter = new KotlinGreeter(); System.out.println(greeter.greet("Alice")); } }
Make sure Kotlin classes are compiled and visible to Java code in the same project or module.
Top-level Kotlin functions are accessed in Java via the generated class named after the Kotlin file with 'Kt' suffix.
Use @JvmStatic or @JvmName annotations in Kotlin to customize Java access if needed.
You can create Kotlin objects and call their functions from Java like normal Java objects.
Top-level Kotlin functions are accessed via special generated classes in Java.
Annotations in Kotlin help make calling from Java easier and clearer.
Practice
Solution
Step 1: Understand Kotlin-Java interoperability
Kotlin classes compile to Java bytecode, so their functions appear as normal Java methods.Step 2: Confirm Java can call Kotlin class functions
Java code can create Kotlin objects and call their methods just like Java methods.Final Answer:
You can call Kotlin class functions like normal Java methods. -> Option AQuick Check:
Kotlin class functions = callable from Java [OK]
- Thinking Kotlin functions need rewriting in Java
- Believing Kotlin functions are inaccessible from Java
- Confusing top-level functions with class functions
fun greet() from Java?Solution
Step 1: Understand top-level function compilation
Top-level Kotlin functions compile into static methods inside a generated class named after the Kotlin file with 'Kt' suffix.Step 2: Call the function from Java using generated class
Java calls the function as a static method on the generated class, e.g., KotlinFileKt.greet().Final Answer:
KotlinFileKt.greet(); -> Option AQuick Check:
Top-level function call = KotlinFileKt.greet() [OK]
- Trying to call top-level function directly without class
- Assuming top-level functions need an instance
- Using wrong class name without 'Kt' suffix
Utils.kt with top-level function:fun add(a: Int, b: Int): Int = a + b
What is the output of this Java code?
System.out.println(UtilsKt.add(3, 4));
Solution
Step 1: Identify the Kotlin function behavior
The Kotlin function adds two integers and returns the sum.Step 2: Understand Java call to Kotlin top-level function
Java calls UtilsKt.add(3, 4), which returns 3 + 4 = 7.Final Answer:
7 -> Option DQuick Check:
3 + 4 = 7 [OK]
- Confusing concatenation with addition
- Expecting compile error due to Kotlin-Java call
- Assuming runtime exception from Kotlin code
Person with function fun greet()?:Person p = new Person(); p.greet;
Solution
Step 1: Check Java method call syntax
In Java, methods must be called with parentheses, even if no arguments.Step 2: Identify the error in code
Code usesp.greet;missing parentheses, causing syntax error.Final Answer:
Missing parentheses to call the function. -> Option CQuick Check:
Method call syntax requires () [OK]
- Omitting parentheses when calling methods
- Assuming Kotlin classes can't be instantiated in Java
- Thinking Kotlin functions are private by default
MathUtils.kt with:@JvmStatic fun multiply(a: Int, b: Int): Int = a * b
How should you call
multiply from Java to get 20 when multiplying 4 and 5?Solution
Step 1: Understand @JvmStatic effect on Kotlin functions
@JvmStatic makes the function a static method inside the companion object, callable via the Companion instance.Step 2: Identify correct Java call
Java calls MathUtils.Companion.multiply(4, 5) to get 20.Final Answer:
MathUtils.Companion.multiply(4, 5); -> Option BQuick Check:
@JvmStatic function call = MathUtils.Companion.multiply() [OK]
- Calling via generated Kt class ignoring @JvmStatic
- Trying to instantiate Kotlin object unnecessarily
- Calling via Companion object when not needed
Ready to prove it?
Pass the test and this pattern moves unknown
