Kotlin import Keyword
last modified April 19, 2025
Kotlin's import system allows you to access declarations from other packages.
The import keyword is essential for organizing and reusing code.
This tutorial explores the import keyword in depth with examples.
Basic Definitions
The import keyword in Kotlin is used to bring declarations into
scope. It can import packages, classes, functions, properties, and type aliases.
Imports help avoid fully qualified names and make code more readable.
Basic Package Import
The simplest form of import brings all declarations from a package into scope. This is useful when you need multiple items from the same package.
package com.zetcode
import kotlin.math.*
fun main() {
val sqrt = sqrt(16.0) // 4.0
val abs = abs(-5) // 5
println("Square root: $sqrt")
println("Absolute value: $abs")
}
Here we import all declarations from kotlin.math package using the
wildcard *. This allows us to use sqrt and abs
functions without package qualification. The wildcard imports all public members.
Single Declaration Import
You can import specific declarations rather than entire packages. This is recommended when you only need a few items from a package.
package com.zetcode
import kotlin.math.PI
import kotlin.math.cos
fun main() {
val cosine = cos(PI) // -1.0
println("Cosine of PI: $cosine")
}
This example imports only PI and cos from the math
package. Explicit imports make dependencies clear and avoid namespace pollution.
They also help with code navigation in IDEs.
Import with Aliasing
Kotlin allows renaming imports using the as keyword. This is useful
when dealing with name conflicts or long class names.
package com.zetcode
import java.util.Date as UtilDate
import kotlin.js.Date as JsDate
fun main() {
val utilDate = UtilDate()
val jsDate = JsDate()
println("Java Date: $utilDate")
println("JS Date: $jsDate")
}
Here we import two different Date classes from different packages.
We use aliases to distinguish them. Aliasing helps avoid naming conflicts and
makes code more readable when using similar classes.
Importing Extension Functions
Kotlin allows importing extension functions specifically. This is useful when you only need certain extensions from a package.
package com.zetcode
import kotlin.text.isNullOrEmpty
fun main() {
val s: String? = null
println("Is null or empty: ${s.isNullOrEmpty()}") // true
}
This example imports the isNullOrEmpty extension function for
nullable strings. Extension function imports work like regular function imports.
They allow you to use the extension without qualifying its package.
Importing Companion Object Members
Kotlin allows importing members of companion objects directly. This provides convenient access to constants and factory methods.
package com.zetcode
import kotlin.math.PI
import kotlin.math.E
import kotlin.math.cos
fun main() {
println("PI: $PI") // 3.141592653589793
println("E: $E") // 2.718281828459045
println("cos(PI): ${cos(PI)}") // -1.0
}
Here we import constants PI and E from kotlin.math.
These are effectively companion object members. Importing them allows direct usage
without class qualification, similar to static imports in Java.
Importing from Same Package
Declarations from the same package don't need explicit imports. Kotlin automatically makes them available in all files of the same package.
package com.zetcode.utils
fun greet() = println("Hello from utils!")
// In another file in same package:
package com.zetcode.utils
fun main() {
greet() // No import needed
}
The greet function is available without import because both files
are in the same package. Kotlin's package system works similarly to Java's,
where same-package members are automatically visible.
Importing Local Functions
Kotlin doesn't support importing local functions directly. However, you can organize related functions in objects or top-level declarations for import.
package com.zetcode.utils
object StringUtils {
fun capitalize(s: String) = s.replaceFirstChar { it.uppercase() }
}
// In another file:
package com.zetcode
import com.zetcode.utils.StringUtils.capitalize
fun main() {
println(capitalize("kotlin")) // Kotlin
}
Here we organize the capitalize function in an object, then import
it specifically. This pattern is common for utility functions that need to be
shared across multiple files.
Best Practices for Importing
- Prefer specific imports: Avoid wildcard imports to make dependencies clear.
- Organize imports: Group imports by source (stdlib, third-party, your project).
- Use aliases wisely: Rename imports only when necessary to resolve conflicts.
- Limit import scope: Import only what you need to keep namespaces clean.
- Follow conventions: Alphabetize imports within groups for consistency.
Source
This tutorial covered Kotlin's import keyword in depth, showing
various import techniques. We explored package imports, single declarations,
aliasing, and special cases like extensions. Proper use of imports makes code
more organized and maintainable.
Author
List all Kotlin tutorials.