Bird
Raised Fist0
Kotlinprogramming~5 mins

Calling Kotlin from Java

Choose your learning style10 modes available
Introduction

Sometimes you write code in Kotlin but want to use it in Java. Calling Kotlin from Java lets you mix both languages easily.

You have a Kotlin library and want to use it in a Java project.
You want to gradually add Kotlin code to an existing Java app.
You want to reuse Kotlin utility functions in Java classes.
You want to call Kotlin data classes or functions from Java code.
You want to combine Kotlin and Java for better code organization.
Syntax
Kotlin
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.

Examples
This Java class creates a KotlinGreeter object and calls its greet function.
Kotlin
public class JavaCaller {
    public static void main(String[] args) {
        KotlinGreeter greeter = new KotlinGreeter();
        System.out.println(greeter.greet("Alice"));
    }
}
This Java code calls a Kotlin top-level function 'add' inside the KotlinMath file.
Kotlin
public class JavaCaller {
    public static void main(String[] args) {
        int sum = KotlinMathKt.add(3, 5);
        System.out.println("Sum is: " + sum);
    }
}
Sample Program

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
/* 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"));
    }
}
OutputSuccess
Important Notes

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.

Summary

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

(1/5)
1. Which statement is true about calling Kotlin functions from Java?
easy
A. You can call Kotlin class functions like normal Java methods.
B. You cannot call Kotlin functions from Java directly.
C. Kotlin functions must be rewritten in Java to be used.
D. Kotlin functions are only accessible in Kotlin files.

Solution

  1. Step 1: Understand Kotlin-Java interoperability

    Kotlin classes compile to Java bytecode, so their functions appear as normal Java methods.
  2. Step 2: Confirm Java can call Kotlin class functions

    Java code can create Kotlin objects and call their methods just like Java methods.
  3. Final Answer:

    You can call Kotlin class functions like normal Java methods. -> Option A
  4. Quick Check:

    Kotlin class functions = callable from Java [OK]
Hint: Kotlin classes compile to Java classes, so methods are callable [OK]
Common Mistakes:
  • Thinking Kotlin functions need rewriting in Java
  • Believing Kotlin functions are inaccessible from Java
  • Confusing top-level functions with class functions
2. Which is the correct way to call a top-level Kotlin function fun greet() from Java?
easy
A. KotlinFileKt.greet();
B. greet();
C. new KotlinFile().greet();
D. Kotlin.greet();

Solution

  1. 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.
  2. 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().
  3. Final Answer:

    KotlinFileKt.greet(); -> Option A
  4. Quick Check:

    Top-level function call = KotlinFileKt.greet() [OK]
Hint: Top-level Kotlin functions appear in Java as static methods in FileNameKt class [OK]
Common Mistakes:
  • Trying to call top-level function directly without class
  • Assuming top-level functions need an instance
  • Using wrong class name without 'Kt' suffix
3. Given Kotlin file 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));
medium
A. Runtime exception
B. 34
C. Compile error
D. 7

Solution

  1. Step 1: Identify the Kotlin function behavior

    The Kotlin function adds two integers and returns the sum.
  2. Step 2: Understand Java call to Kotlin top-level function

    Java calls UtilsKt.add(3, 4), which returns 3 + 4 = 7.
  3. Final Answer:

    7 -> Option D
  4. Quick Check:

    3 + 4 = 7 [OK]
Hint: Top-level Kotlin functions return expected results when called from Java [OK]
Common Mistakes:
  • Confusing concatenation with addition
  • Expecting compile error due to Kotlin-Java call
  • Assuming runtime exception from Kotlin code
4. What is wrong with this Java code calling Kotlin class Person with function fun greet()?:
Person p = new Person();
p.greet;
medium
A. greet is a private function in Kotlin.
B. Person class cannot be instantiated in Java.
C. Missing parentheses to call the function.
D. Kotlin functions cannot be called from Java.

Solution

  1. Step 1: Check Java method call syntax

    In Java, methods must be called with parentheses, even if no arguments.
  2. Step 2: Identify the error in code

    Code uses p.greet; missing parentheses, causing syntax error.
  3. Final Answer:

    Missing parentheses to call the function. -> Option C
  4. Quick Check:

    Method call syntax requires () [OK]
Hint: Always use parentheses to call methods in Java [OK]
Common Mistakes:
  • Omitting parentheses when calling methods
  • Assuming Kotlin classes can't be instantiated in Java
  • Thinking Kotlin functions are private by default
5. You have a Kotlin file 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?
hard
A. MathUtilsKt.multiply(4, 5);
B. MathUtils.Companion.multiply(4, 5);
C. new MathUtils().multiply(4, 5);
D. MathUtils.multiply(4, 5);

Solution

  1. Step 1: Understand @JvmStatic effect on Kotlin functions

    @JvmStatic makes the function a static method inside the companion object, callable via the Companion instance.
  2. Step 2: Identify correct Java call

    Java calls MathUtils.Companion.multiply(4, 5) to get 20.
  3. Final Answer:

    MathUtils.Companion.multiply(4, 5); -> Option B
  4. Quick Check:

    @JvmStatic function call = MathUtils.Companion.multiply() [OK]
Hint: @JvmStatic makes Kotlin function callable as static method in Java companion object [OK]
Common Mistakes:
  • Calling via generated Kt class ignoring @JvmStatic
  • Trying to instantiate Kotlin object unnecessarily
  • Calling via Companion object when not needed
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard