---
title: "Kotlin ve Android'de java.lang.NullPointerException'ı mesajından çöz"
description: "Kotlin'de java.lang.NullPointerException kaynağı !!, null olmayan tipe konan Java değeri, null cast'i ya da Java'dan gelen çağrıdır. JDK 17'de 6 şekilde tetikledik, her mesajın çözümü burada."
canonical: "https://logbrew.co/tr/errors/nullpointerexception"
last_updated: "2026-11-10"
---

# Kotlin ve Android'de java.lang.NullPointerException'ı mesajından çöz

Kotlin'de `java.lang.NullPointerException` kaynağı `!!`, null olmayan tipe konan Java değeri, `null` cast'i ya da Java'dan gelen çağrıdır. JDK 17'de 6 şekilde tetikledik, her mesajın çözümü burada.

10 Kasım 2026 tarihinde Kotlin 2.4.0, OpenJDK 17.0.18 ve logbrew-kotlin 0.2.3 ile test edildi

[Furkan Erday](https://github.com/furkanerday) tarafından. Furkan Erday, LogBrew'un kurucusu. LogBrew'u her gün Claude Code ve Codex ile geliştiriyor.

Canonical: https://logbrew.co/tr/errors/nullpointerexception

## Her `NullPointerException` mesajı neyi söyler

| Kod ne yaptı | `NullPointerException` | Mesaj nedeni söylüyor |
| --- | --- | --- |
| Null bir değerde `order!!` | Evet | Mesaj yok |
| Java değeri, null olmayan bir `val` içinde | Evet | `getProperty(...) must not be null` |
| `null as String` | Evet | `null cannot be cast to non-null type` |
| Java'dan Kotlin parametresine `null` | Evet | `Parameter specified as non-null is null` |
| Java'da `null` üzerinde metot çağrısı | Evet | `Cannot invoke "String.length()"` |
| Atanmadan okunan bir `lateinit` | `UninitializedPropertyAccessException` | `lateinit property keg has not been initialized` |

JDK 17 ve Kotlin 2.4 ile 6 çalıştırma. İlk sütundaki dolu kupa `NullPointerException` fırlatıldığı, ikincideki ise mesajın nedeni söylediği anlamına gelir.

## Önce mesajı, sonra ilk frame'i oku

### Satırı kendi kodunda bul

Kendi paketindeki ilk stack frame dosyayı ve satırı söyler. Trace'de bir `Caused by:` bölümü varsa önce onun altındaki frame'leri oku. Sonra mesaj, aşağıdaki 5 durumdan hangisinde olduğunu söyler.

### Null bir değerde `!!`, mesaj yok

`!!`, mesajsız bir `NullPointerException` fırlatır, bu yüzden mesajı iki nokta üst üsteden sonra yazan bir logger `java.lang.NullPointerException: null` gösterir. İlk frame'deki satırda `!!` vardır.

```bash
val order: String? = null
order!!.length
```

Çıktı

```text
java.lang.NullPointerException
	at NpeKt.main$lambda$0(Npe.kt:27)
```

### Java değeri null olmayan bir tipe girince `must not be null`

Bir Java metodu platform tipi döndürür ve Kotlin onu yalnızca null olmayan bir değişkene koyduğunda kontrol eder. `getProperty(...)`, `null` döndüren çağrıyı söyler.

```bash
val beer: String = System.getProperty("taproom.beer")
```

Çıktı

```text
java.lang.NullPointerException: getProperty(...) must not be null
	at NpeKt.main$lambda$1(Npe.kt:30)
```

### Java, Kotlin'e `null` geçirince `Parameter specified as non-null is null`

Kotlin, public bir fonksiyonun null olmayan her parametresini fonksiyon çağrıldığında kontrol eder, bu yüzden Java'dan gelen bir `null` fonksiyonun ilk satırında patlar. Mesaj fonksiyonu ve parametreyi söyler.

```bash
// Kotlin
fun greet(name: String): Int = name.length

// Java
NpeKt.greet(null);
```

Çıktı

```text
java.lang.NullPointerException: Parameter specified as non-null is null: method NpeKt.greet, parameter name
	at NpeKt.greet(Npe.kt)
```

### `null` cast'inden sonra `null cannot be cast to non-null type`

`null` üzerinde `as String` fırlatır. `as? String` ise `null` döndürür, bizim çalıştırmamızda da hiçbir şey fırlatmadan öyle yaptı.

```bash
val value: Any? = null
value as String
```

Çıktı

```text
java.lang.NullPointerException: null cannot be cast to non-null type kotlin.String
	at NpeKt.main$lambda$2(Npe.kt:35)
```

### Java kodunda `null` üzerinde metot çağrısından `Cannot invoke`

JDK 15'ten beri Java metodu ve değişkeni söyler. `<local0>`, sınıfın `-g` olmadan derlendiği ve değişken adının eksik olduğu anlamına gelir. Görmek için `javac -g` ile derle. Android'de çalışma zamanı bunun yerine `Attempt to invoke virtual method ... on a null object reference` yazar.

```bash
String beer = null;
beer.length();
```

Çıktı

```text
java.lang.NullPointerException: Cannot invoke "String.length()" because "<local0>" is null
	at Caller.lengthOfNull(Caller.java:10)
```

## Kotlin ve Android'de çöz

### `!!` yerine bir varsayılan ya da adlı bir hata koy

`?:` bir varsayılan verir ya da fonksiyondan çıkar. Mesajlı `requireNotNull()` hemen patlar ve neyin eksik olduğunu söyler, böylece ilk frame de mesaj da nedeni gösterir.

```bash
val order = orders[id] ?: return
val keg = requireNotNull(taps[id]) { "keg is not set for tap $id" }
```

Çıktı

```text
java.lang.IllegalArgumentException: keg is not set for tap 3
	at NpeKt.main$lambda$6(Npe.kt:48)
```

### Java sınırında tipi nullable ilan et

Java'dan gelen değere nullable bir tip ver, derleyici kullanmadan önce `null` durumunu ele almanı zorunlu kılar. Kendi Java kodunu `@Nullable` ve `@NonNull` ile işaretle, Kotlin platform tipi yerine gerçek bir tip görür.

```bash
val beer: String? = System.getProperty("taproom.beer")
val name = beer ?: "house ale"
```

### JSON parser'ı sonra değil, parse anında patlat

Nesneleri reflection ile kuran bir parser, null olmayan bir Kotlin özelliğine `null` koyabilir ve exception parse'tan çok uzakta ortaya çıkar. square/moshi#143 bunu 2016'da bildirdi. Ocak 2018'de, eksik null olmayan alanı reddeden Kotlin adapter'ını kullan yanıtıyla kapatıldı.

### `lateinit`'i yalnızca ilk kullanımdan önce atanan değerler için kullan

Atanmadan okunan bir `lateinit` özelliği `NullPointerException` değil `UninitializedPropertyAccessException` fırlatır. Önce `::keg.isInitialized` ile kontrol et ya da değeri hesaplayabiliyorsan `by lazy` kullan.

```bash
class Taproom {
    lateinit var keg: String
}

Taproom().keg.length
```

Çıktı

```text
kotlin.UninitializedPropertyAccessException: lateinit property keg has not been initialized
	at Taproom.getKeg(Npe.kt:6)
```

### Exception'ı stack'iyle LogBrew'a gönder

Kotlin SDK'sındaki `captureThrowable()` exception tipini, stack frame'lerini ve neden zincirini gönderir, LogBrew da tekrarları 1 sorunda gruplar. `includeMessage = true` geçmedikçe mesaj dışarıda kalır. Uygulamanda kayıt transport'u yerine `flush()` çağrısına `HttpTransport()` geçir.

```bash
import co.logbrew.sdk.LogBrewAndroid
import co.logbrew.sdk.LogBrewClient
import co.logbrew.sdk.RecordingTransport

val transport = RecordingTransport.alwaysAccept()
val client = LogBrewClient.create(apiKey = System.getenv("LOGBREW_API_KEY"), sdkName = "logbrew-kotlin", sdkVersion = "0.2.3")
try {
    val beer: String = System.getProperty("taproom.beer")
    beer.length
} catch (e: NullPointerException) {
    LogBrewAndroid.captureThrowable(client, "evt_npe_1", "2026-11-10T09:00:00Z", e)
}
println(client.flush(transport))
```

Çıktı

```text
TransportResponse(statusCode=202, attempts=1)
```

## Test ederken gördüklerimiz

1 Kotlin ve 1 Java dosyasını Kotlin 2.4.0 ile OpenJDK 17.0.18 üzerinde derledik ve exception'ı 6 şekilde tetikledik. 4'ü Kotlin kodundan geldi, `!!`, null olmayan bir `val` içindeki Java değeri, `null` üzerinde `as String` ve Java'nın Kotlin parametresine geçirdiği bir `null`. 5'incisi Java'da `null` üzerinde metot çağrısıydı. 6'ncısı, bir `lateinit` okuması, hiç `NullPointerException` değildi.

Yalnızca `!!` durumunun mesajı yoktu. Diğer 4'ü çağrıyı, parametreyi, tipi ya da metodu söyledi. Java mesajı değişken için `<local0>` dedi, çünkü `-g` olmadan derledik.

Mesajlı `requireNotNull()`, yazdığımız satırda `IllegalArgumentException: keg is not set for tap 3` fırlattı. `as? String` hiçbir şey fırlatmadan `null` döndürdü.

## Kotlin neden hâlâ NullPointerException fırlatır

Kotlin derleyicisi nullable bir tipteki çağrıyı reddeder, bu yüzden Kotlin kodu yalnızca senin istediğin yerde `NullPointerException` fırlatır. Null güvenliği dokümantasyonu tek nedenler olarak `!!`, açık bir `throw`, başlatılmamış bir `this` ve Java ile birlikte çalışmayı sayar. Çalıştırmamızın gösterdiği gibi `as` ile `null` cast'i de fırlatır.

Java'dan gelen bir değerin platform tipi vardır, derleyici mesajlarında `String!` diye yazılır. Onu bir `String` ya da `String?` içine koyabilirsin. `String` içinde Kotlin atama anında kontrol eder ve `must not be null` fırlatır, ikinci çalıştırmamız da orada patladı.

JEP 358, `Cannot invoke ... because ... is null` mesajını JDK 14'te JVM'e ekledi, JDK 15 de varsayılan olarak açtı. Android'in çalışma zamanı kendi metnini yazar. google/gson#1778 bunu bir Android uygulamasından `Attempt to invoke virtual method 'int java.lang.Object.hashCode()' on a null object reference` olarak gösterir.

## LogBrew ne kaydeder

`captureThrowable()`, `error` seviyesinde `NullPointerException` başlıklı 1 sorun gönderdi, `exception.type` `NullPointerException`, mekanizma `android.exception` ve `handled: true` ile. Neden zinciri `java.lang.NullPointerException` için 7 stack frame'li 1 kayıt tuttu, her birinde dosya, satır, fonksiyon ve modül vardı. İlk frame `Npe.kt` içinde 58. satırdaki `main` idi.

Mesaj yoktu ve zincir kaydı `messageState: "redacted"` dedi. `includeMessage = true` ile sorun, mesaj olarak `getProperty(...) must not be null` taşıdı. `includeStackTrace = true` ile `throwableStackTrace` metadata alanı trace metnini mesajsız tuttu.

`flush()`, kayıt transport'u üzerinden `statusCode=202, attempts=1` yanıtladı. `HttpTransport()` geçirdiğinde aynı gövde LogBrew'a gider.

## Sık sorulan sorular

### NullPointerException nedir?

Kod, `null` tutan bir referansı metot çağrısında, alan okumasında, dizi indeksinde ya da unboxing'de kullandığında JVM'in fırlattığı exception. `RuntimeException`'dan türer, bu yüzden hiçbir `throws` bildirimi onu saymaz.

### Null güvenliği varken Kotlin neden NullPointerException fırlatır?

Kotlin null olabilirliği derleme zamanında yalnızca Kotlin tipleri için kontrol eder. `!!`, `null` üzerinde `as`, null olmayan bir tipe koyduğun Java değeri ve `null` geçiren bir Java çağrısı çalışma zamanında fırlatır. Her birinin kendi mesajı var, yukarıda listelendi.

### `java.lang.NullPointerException: null` ne anlama gelir?

Exception'ın mesajı yok. Mesajı iki nokta üst üsteden sonra yazan kod oraya `null` yazar. Kotlin'de `!!` tam olarak bu exception'ı fırlatır, bu yüzden ilk frame'deki satırda `!!` ara.

### Parameter specified as non-null is null ne anlama gelir?

Java ya da reflection, parametresi null olmayan bir Kotlin fonksiyonuna `null` geçirdi. Mesaj fonksiyonu ve parametreyi söyler. Parametreyi nullable yap ya da `null` değeri çağıran tarafta durdur.

### Android'de NullPointerException nasıl çözülür?

`Caused by:` altındaki, kendi paketindeki frame'i oku, sonra mesajı yukarıdaki durumlarla eşleştir. Android'de çalışma zamanı `Attempt to invoke virtual method ... on a null object reference` yazar ve adını verdiği metot `null` üzerindeki çağrıdır.

### NullPointerException checked bir exception mı?

Hayır. `RuntimeException`'dan türer, bu yüzden derleyici onu yakalamanı zorunlu kılmaz. Yakalamak yerine nedeni çöz, çünkü metot çağrısına ulaşan bir `null`, ondan önceki koddaki bir bug'dır.

## Her NullPointerException'ı stack'iyle gör

LogBrew Kotlin SDK'sı her exception'ı tipi, stack frame'leri ve neden zinciriyle gönderir, LogBrew da tekrarları 1 sorunda gruplar. Cömert ücretsiz planla başla, kart gerekmez.

[Ücretsiz başla](https://logbrew.co/tr)

## Kaynaklar

- [Kotlin docs, Null safety](https://kotlinlang.org/docs/null-safety.html)
- [Kotlin docs, Null-safety and platform types](https://kotlinlang.org/docs/java-interop.html#null-safety-and-platform-types)
- [JEP 358, Helpful NullPointerExceptions](https://openjdk.org/jeps/358)
- [square/moshi#143](https://github.com/square/moshi/issues/143)
- [google/gson#1778](https://github.com/google/gson/issues/1778)

## Diğer hata çözümleri

- [Mesajını, dosyasını ve satırını gizleyen script error hatasını çöz](https://logbrew.co/tr/errors/script-error)
- [Failed to fetch hatasını çöz ve 3 nedenini birbirinden ayır](https://logbrew.co/tr/errors/failed-to-fetch)
- [Yeniden ürettiğimiz hatalar ve her birinin çözümü](https://logbrew.co/tr/errors)
