Kotlin Academy · Lekcja

Typy platformowe

Wartość null z języka Java

Lekcja 4 z 413 kroki

Typy platformowe to bezpłatna lekcja Kotlin Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Kotlin Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Kotlin Academy zawiera 4 lekcji w sumie.

Kotlin spotyka Javę

Kotlin działa na maszynie wirtualnej JVM i stale wywołuje kod Javy. Java nie zna jednak pojęcia typów nullable i non-null.

Jak zatem Kotlin obsługuje wartość pochodzącą z Javy? Za pomocą typów platformowych.

Czym jest typ platformowy

Typ platformowy to typ otrzymany przez Kotlin z Javy, którego nullowalność jest nieznana.

Kotlin zapisuje go jako String! w komunikatach o błędach. Wykrzyknik oznacza: wartość może być równa null albo może nie być równa null, a Kotlin nie wymusi żadnego wyboru.

Łagodniejsze sprawdzanie

W przypadku typów platformowych Kotlin łagodzi sprawdzanie wartości null. Mogą Państwo traktować wartość jako non-null bez błędu kompilatora.

Kompromis polega na tym, że jeśli wartość rzeczywiście wynosi null, w czasie działania programu pojawi się NullPointerException.

To Państwo wybierają typ

Przechowując wartość typu platformowego, decydują Państwo, jak ją typować:

  • jako non-null String → wygodnie, ale ryzykownie
  • jako nullable String? → bezpiecznie i jednoznacznie

Poniższy przykład w Kotlinie symuluje ten wybór.

fun fromJava(): String? = "value from Java"

fun main() {
    val safe: String? = fromJava()
    println(safe?.length)
}

Ryzykowny wybór

Jeśli założą Państwo, że wartość nie jest równa null, a źródło zwróci null, awaria nastąpi podczas przypisania albo pierwszego użycia wartości.

To ukryte zagrożenie typów platformowych.

fun fromJava(): String? = null

fun main() {
    try {
        val risky: String = fromJava()!!
        println(risky.length)
    } catch (e: NullPointerException) {
        println("Null came from the Java side")
    }
}

Adnotacje pomagają

Biblioteki Javy mogą używać adnotacji takich jak @Nullable i @NotNull.

Jeśli są obecne, Kotlin je respektuje i udostępnia prawidłowy typ String? albo String zamiast typu platformowego.

Dobra praktyka: zakładajcie nullable

Podczas wywoływania nieopatrzonego adnotacjami kodu Javy bezpiecznym nawykiem jest traktowanie wyniku jako nullable.

Należy oznaczyć zmienną za pomocą ? i używać bezpiecznych wywołań, tak jak w przypadku każdej wartości nullable w Kotlinie.

fun fromJava(): String? = "data"

fun main() {
    val value: String? = fromJava()
    val length = value?.length ?: 0
    println(length)
}

Bezpieczne granice

Granicę z Javą należy traktować jako niezaufaną. Wartości należy sprawdzać lub ustalać dla nich wartości domyślne dokładnie w miejscu, w którym trafiają do kodu Kotlina.

Od tego momentu reszta kodu może działać na poprawnych typach Kotlina.

fun fromJava(): String? = null

fun main() {
    val name = fromJava() ?: "default"
    // from here on, name is a clean non-null String
    println(name.uppercase())
}

Dlaczego Kotlin na to pozwala

Kotlin mógłby wymuszać nullable dla każdej wartości pochodzącej z Javy, ale sprawiłoby to, że współdziałanie z Javą byłoby niezwykle rozwlekłe.

Typy platformowe są pragmatycznym kompromisem: zapewniają wygodę, a jednocześnie pozwalają zachować ścisłą kontrolę.

Rozpoznawanie typów platformowych

Nie będą Państwo samodzielnie zapisywać String!. Pojawia się on wyłącznie w podpowiedziach IDE i komunikatach o błędach po wskazaniu wartości pochodzących z Javy.

Widoczny znak ! jest sygnałem, aby świadomie zdecydować o nullowalności.

Zastosowanie w praktyce

Typy platformowe łączą Javę i Kotlina:

  • Mają nieznaną nullowalność, oznaczaną jako Type!
  • Kotlin pozwala wybrać typ nullable albo non-null
  • W razie wątpliwości należy zakładać nullable, aby zachować bezpieczeństwo
  • Adnotacje usuwają konieczność zgadywania
fun fromJava(): String? = "safe value"

fun main() {
    val value: String? = fromJava()
    println(value?.uppercase() ?: "missing")
}

Szybkie sprawdzenie

Sprawdźcie Państwo swoją wiedzę na temat typów platformowych.

Podsumowanie

Poznali Państwo sposób, w jaki nullowalność przekracza granicę Javy:

  • Typy platformowe mają nieznaną nullowalność
  • Kotlin łagodzi sprawdzanie, ale błędne założenie powoduje NPE w czasie działania programu
  • Należy zakładać nullable i ustalać wartości domyślne na granicy systemu
  • Adnotacje Javy przywracają prawidłowe typy

Na tym kończy się szczegółowe omówienie bezpieczeństwa wartości null.

Bezpłatny start

Ucz się Kotlin dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
51
Lekcje
203

Często zadawane pytania

Czy lekcja „Typy platformowe” jest bezpłatna?

Tak — pełny tekst „Typy platformowe” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Kotlin Academy, przejdź na CoddyKit PRO. Kurs Kotlin Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Typy platformowe”?

Wartość null z języka Java Ćwiczysz Kotlin Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Kotlin Academy?

Nie wymagamy żadnego doświadczenia. Kotlin Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Typy platformowe”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Kotlin Academy?

Tak. Każda lekcja Kotlin Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Typy nullable i non-null
  2. Bezpieczne wywołania i Elvis
  3. Operator !!
  4. Typy platformowe
← Powrót do Kotlin Academy