Java to Kotlin dönüştürücüsünün, yöntem argümanlarını null olarak işaretlememesinden dolayı beni sefil bir şekilde başarısızlığa uğrattığı bir durum vardı.Java to Kotlin dönüştürücü ve null yöntemi argümanları
Örnek: registerActivityLifecycleCallbacks
kullanarak izleme faaliyeti yaşam döngüsü:
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {}
@Override
public void onActivityStarted(Activity activity) {}
@Override
public void onActivityResumed(Activity activity) {}
// ... other overriden methods
});
yapıştırma Kotlin sonuçlarına bu kodu:
registerActivityLifecycleCallbacks(object : Application.ActivityLifecycleCallbacks {
override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle) {}
override fun onActivityStarted(activity: Activity) {}
override fun onActivityResumed(activity: Activity) {}
override fun onActivityPaused(activity: Activity) {}
// ... other overriden methods (all with non-nullable parameters)
})
meselenin değer çünkü Bundle?
olması gereken yerde savedInstanceState
argüman türü Bundle
olmasıdır null
olabilir. Bir Activity
örneği durumuna olmadan oluşturulduğunda aşağıdaki istisna alacak Bu durumda
java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter savedInstanceState
Not buna kök neden onActivityCreated documentationBundle
boş olabilir söz etmediğini olabilir
// Java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
// Kotlin
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
sorum şu: onCreate
basit dönüşüm beklendiği gibi çalıştığını neden onCreate documentation oysa açıklayabilir gelmez ki Bu tür sorunları önlemek için hangi argümanların null olması gerektiğini nasıl bilebiliriz? @Nullable ek açıklamaları burada yardımcı olmaz.
Bu sizin argümanınızı desteklediğini tahmin ediyorum: https://kotlinlang.org/docs/reference/java-interop.html # nullability-ek açıklamalar. Bir ek açıklamayla bir kez daha dönüştürmeyi deneyeceğim (daha önce benim için çalışmadı) –
Evet, Kotlin, ek açıklama içermediği sürece Java kodunun varsayılan olarak boş olmadığını varsayar. Kodun Java'dan geldiğini size söylemek için 'dize 'gibi Java kodu için'! 'Kullanın. – Joshua