2016-03-31 16 views
5

Java kitaplığından bir yöntemi geçersiz kıldım ve işlev için parametre @NonNull olarak ek açıklamalı. Ancak, yöntem çağrıldığında, parametre sık sık bir null değeri ile birlikte gelir. Kotlin'deki yöntemi geçersiz kıldığımda, @NonNull ek açıklamasına uymaya zorlar ve parametreyi null olarak işaretlemez. Elbette, Kotlin parametresi boş bir değerle birlikte geldiğinde çalışma zamanında bir istisna atar. Yöntemi Kotlin'de geçersiz kılmanın ve @NonNull ek açıklamasını yok saymanın bir yolu var mı?Bir java yöntemini nasıl geçersiz kılabilir ve bir parametrenin null yapısını nasıl değiştirebilirim?

Özellikle, Android için uygulama kitaplığı kullanıyorum. yöntem KOTLIN içinde AppCompatActivity.java

@CallSuper 
public void onSupportActionModeFinished(@NonNull ActionMode mode) { 
} 

geçersiz kılma içinde:

override fun onSupportActionModeFinished(mode: ActionMode) { 
    super.onSupportActionModeFinished(mode) 
} 
+0

bunu, ona da CallSuper açıklama ile birlikte geliyor çünkü nonnull kalıptır izleyin hayati önem taşıyor sebep. Boş bir değer aktardıysanız, açıklama, değerin null olmadığından emin olmak için süper yöntemde hiçbir kontrol yapılmaz. Neredeyse kesinlikle bir NPE ile sonuçlanacaksınız. Bu yöntemi açıkça çerçevenin dışında çağırmıyorsanız, çerçeve bu açıklamaya saygı göstereceğinden asla boş değer içermemelidir. – zgc7009

+0

Kitaplık bu yöntemi çağırıyor ve kodumu değil, boş bir değer iletiyor. Kütüphane kendi notunu kırıyor. Java'da geçersiz kıldığımda ve boş değerin süper yönteme geçmesine izin verdiğimde, hiçbir NPE oluşmaz. – brain

+0

Dünyada ne, sadece bu tuhaf. – zgc7009

cevap

4

Kotlin derleyici tarafından nullability açıklama işleme bastırmak için doğrudan bir yol gibi görünüyor. Kotlin derleyici hiçbir nullability ek açıklamaları vardı sanki davranır aynı kod elemanı hem @Nullable ve @NonNull gördüğünde:

bir çözüm olarak, Java @Nullable ek açıklamasıyla bir ara türetilmiş bir sınıf yapabilirsiniz. Sonra sadece Kotlin'de sınıflayın. Örnek:

Java @NonNull parametresi olan bir sınıfı düşünün:

Kotlin ek açıklama anlar
abstract class Base { 
    public abstract void f(@NonNull String str); 
    //... 
} 

: f(str: String), tip boş olmayan.

Şimdi, Java Base uzatmak yöntemini geçersiz ve Intermediate yılında parametreye @Nullable ek açıklama ekleyin: Intermediate için

abstract class Intermediate extends Base { 
    @Override 
    public abstract void f(@Nullable String str); 
} 

, Kotlin f(str: String!) görür parametre platform type vardır, yani onun nullability bilinmemektedir.

Bundan sonra, Intermediate bir Kotlin alt sınıfta null parametreyi beyan edebilecektir:

class Derived(): Intermediate() { 
    override fun f(url: String?) { ... } 
} 
+2

Umarım böyle bir durum için bu uyarıyı bastırmak veya yok saymak için bir yol eklerler. Sadece bir parametreyi düzeltmek için bu ara sınıfı yaratmak acıdır. – brain

İlgili konular