Undgå NullPointerExceptions
Mønstre til sikker kode.
Undgå NullPointerExceptions er en gratis Android Academy-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Android Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Android Academy-kurset indeholder 4 lektioner i alt.
Målet: Ingen NPE'er
En NullPointerException, eller NPE, opstår, når koden bruger noget, der faktisk er null. Kotlin er designet til at gøre disse fejl sjældne.
Denne lektion samler de værktøjer, du har lært, og advarer om de få måder, en NPE stadig kan snige sig ind på.
Operatoren !!
Påstanden om, at en værdi ikke er null, !!, fortæller compileren, at den skal stole på dig. Hvis du tager fejl, udløser den en NPE.
Den fjerner sikkerheden, så brug den sjældent og kun når du er helt sikker.
fun main() {
val name: String? = "Ada"
println(name!!.length) // works, name is not null
}!! kan få programmet til at gå ned
Hvis værdien faktisk er null, udløser !! en NullPointerException på den pågældende linje.
Det er den vigtigste måde at genindføre det problem, Kotlin ellers forhindrer. Undgå !!, når en safe call eller Elvis kan bruges.
val name: String? = null
println(name!!.length)
// throws KotlinNullPointerExceptionForetræk sikre alternativer
Næsten enhver brug af !! kan omskrives med ?. og ?:. Den sikre version kan ikke få programmet til at gå ned.
Sammenlign de risikable og sikre former nedenfor.
// Risky:
val len1 = name!!.length
// Safe:
val len2 = name?.length ?: 0Validér tidligt
Håndter null ved grænsen til din kode, og arbejd derefter med værdier, der ikke er null, internt. Brug Elvis sammen med return eller throw til at afvise manglende input med det samme.
Efter kontrollen smart-castes værdien til en værdi, der ikke er null.
fun length(s: String?): Int {
val text = s ?: return 0
return text.length
}requireNotNull
Når null faktisk betyder, at der er en fejl i programmet, udløser requireNotNull en tydelig fejl og returnerer værdien, der ikke er null.
Den er mere beskrivende end !!, fordi du kan tilføje en meddelelse.
fun start(config: String?) {
val c = requireNotNull(config) { "config missing" }
println(c.length)
}Platformtyper fra Java
Værdier fra Java har en ukendt nullabilitet og kaldes platformtyper. Kotlin kan ikke garantere, at de ikke er null.
Når du bruger Java-biblioteker, skal du angive den forventede type eksplicit og håndtere null defensivt.
// From Java: String maybe = obj.getName();
val name: String? = obj.name // be safe
println(name?.length ?: 0)Faldgruben ved lateinit
En lateinit var lader dig vente med at initialisere en egenskab, der ikke er null. Men hvis du bruger den før tildelingen, udløses en undtagelse.
Brug kun lateinit, når du er sikker på, at værdien er angivet, før den tilgås.
lateinit var config: String
fun read() {
println(config.length)
// crashes if config was never set
}Standardværdier i stedet for null
Ofte kan du helt undgå nullabilitet ved at vælge en fornuftig standardværdi. En tom streng eller en tom liste er ofte bedre end null.
Færre nullable typer betyder færre muligheder for en NPE.
fun main() {
val tags: List<String> = emptyList()
println(tags.size) // 0, never null
}En sikker pipeline
Dette program læser en valgfri værdi, transformerer den sikkert og producerer altid et resultat. Ingen !! og intet nedbrud.
Det er denne stil, du bør stræbe efter i rigtig Android-kode.
fun main() {
val input: String? = null
val result = input?.trim()?.uppercase() ?: "N/A"
println(result) // prints: N/A
}Bedste praksis
Foretræk typer, der ikke er null, håndtér null ved grænserne med Elvis, og brug ?.let til valgfrie handlinger. Gem !! til de sjældne tilfælde, hvor null er umulig.
Hvis du følger disse vaner, bliver NullPointerExceptions fortid.
val safe = data?.value ?: default
data?.let { handle(it) }Hurtigt tjek
Test din forståelse af, hvordan du undgår NullPointerExceptions.
Opsummering
NPE'er i Kotlin skyldes normalt !!, platformtyper fra Java eller ikke-initialiserede lateinit-værdier. Undgå dem ved at foretrække typer, der ikke er null, og sikre operatorer.
Brug ?., ?:, ?.let og validering som requireNotNull for at holde koden fri for nedbrud. Du har nu gennemført det grundlæggende i Ktlin null-sikkerhed.
Lær Kotlin med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 36
- Lektioner
- 152
Ofte stillede spørgsmål
Er lektionen “Undgå NullPointerExceptions” gratis?
Ja — alle 3 lektioner i læringssporet Android Academy, inklusive “Undgå NullPointerExceptions”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Android Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Undgå NullPointerExceptions”?
Mønstre til sikker kode. Du øver dig i Android Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Android Academy?
Der kræves ingen tidligere erfaring. Android Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.
Hvor lang tid tager lektionen “Undgå NullPointerExceptions”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Android Academy-lektion?
Ja. Alle Android Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Nullable kontra non-null-typer
- Sikre kald og Elvis
- let, also og scope-funktioner
- Undgå NullPointerExceptions