JavaRush
AI Academy
new
Promotion
Learning
Courses
Tasks
Quizzes
Games
Help
Schedule of nudges
Internship
Community
Users
Forum
Chat
Articles
Success stories
Activities
Reviews
Subscriptions
Light theme

Lectures

  • Reviews
  • About us
  • CS50
Start
Start learning
Start learning
  • My progress
  • Courses
  • Quest map
  • Lectures
  • Kotlin on the JVM: how to call Java APIs

    Kotlin SELF
    29 level,0 lecture
    We break down how Kotlin/JVM “gets along” with the JDK: how to import classes from java.*, how using a fully qualified name differs from import, how to call Java constructors and “static” methods (for example, UUID.randomUUID() and System.getProperty(...)), how to work with mutable Java collections ( ArrayList), and which errors are most common in the first attempts to call Java APIs from Kotlin.
    Open
  • Platform types in Kotlin: T! and contract T? vs T

    Kotlin SELF
    29 level,1 lecture
    We break down what platform types ( T!) are in Kotlin when doing Java interop, why the compiler cannot always guarantee null-safety at the boundary with Java, and how to “ground” values into an explicit contract: T? (nullable + safe handling via ?. and ?:) or T (fail-fast via require or !!). Using practical examples with System.getProperty, System.getenv, and UUID, we show where NPEs hide and how to build a “boundary contract” discipline.
    Open
  • @Nullable/@NotNull and Java API nullability in Kotlin

    Kotlin SELF
    29 level,2 lecture
    We break down how Kotlin on the JVM “understands” Java-code nullability: when Java signatures get enhanced by @Nullable/ @NotNull annotations, why platform types ( T !) sometimes remain, and how to properly handle collection nullability (container vs elements) via boundary normalization: ?: emptyList (), filterNotNull (), mapNotNull ().
    Open
  • SAM conversion — Kotlin lambdas as implementations of Java SAM types

    Kotlin SELF
    29 level,3 lecture
    We break down how Kotlin on the JVM “plays nicely” with Java APIs that accept functional interfaces (SAM types, Single Abstract Method): how a lambda is automatically turned into a Runnable, Predicate, or Comparator, how trailing-lambda syntax works, why ambiguous overloads sometimes happen, and which practical mistakes occur most often (overflow in a comparator, confusion between Predicate<T> vs (T) -> Boolean, capturing an outer var).
    Open
  • Minimally “Java-friendly” Kotlin API — @file:JvmName and @JvmField

    Kotlin SELF
    29 level,4 lecture
    We break down how Java “sees” Kotlin on the JVM: why top-level functions end up in a class with the Kt suffix, how to give that class a normal name via @file:JvmName, and when it makes sense to export properties as fields without getters/setters using @JvmField. At the end — a mini-embedding into a CLI project and typical interop mistakes.
    Open
Learn
  • Registration
  • Java course
  • Help with tasks
  • Pricing
Community
  • Users
  • Articles
  • Forum
  • Chat
  • Success stories
  • Activities
Company
  • About us
  • Contacts
  • Reviews
  • FAQ
  • Support
JavaRushJavaRush — is an interactive online course for learning Java programming from scratch. It contains 1200 practical tasks with one-click solution checking, the necessary minimum of theory on Java basics, and motivating features that help you complete the course: games, quizzes, interesting projects and articles on effective learning and the career of a Java developer.
Follow us
Язык интерфейса
Русский
English
Українська
"Programmers are not born" © 2026 JavaRush
MastercardVisa
"Programmers are not born" © 2026 JavaRush