2017-05-20 31 views
2

私はKotlinを初めて使っています。Kotlin - Parcelableを実装するJavaクラスから継承

私がKotlinに変換した最初のクラスは、RectF(Parcelableを実装する)を拡張する内部クラスを持っています。

static class MyClass extends RectF

internal class MyClass : RectF()

に変換しかし、次のエラーがあります。

This class implements Parcelable but does not provide a CREATOR field

が実験しを、私は、MyClassの中val CREATOR = RectF.CREATORがエラーを削除しますが、これは醜いハックですました。

誰でも問題を説明/解決できますか?

多くのありがとうございます。

+0

本当にエラーまたは警告ですか? Javaコードから同じ警告が得られるはずです。ほとんどの場合、最初から継承ではなく構成を使用しているはずです。 – Joni

+0

Javaコードでは警告は表示されません。 – veritas1

答えて

3

あなたはParcelable契約に準拠する必要があります。

Classes implementing the Parcelable interface must also have a non-null static field called CREATOR of a type that implements the Parcelable.Creator interface.

しかし、あなたのハックはリントエラーが削除されます。あなたのクラスにはParcelable.Creatorを直接実装する必要があります。RectFのいずれかを再利用しないでください。

internal class MyClass : RectF() { 
    companion object { 
     @JvmField 
     val CREATOR = Parcelable.Creator() { ... } 
    } 
} 
+0

答えをありがとう。しかし、これは奇妙に思えます。 RectFクラスは、Parcelableインターフェイスを実装し、その契約を満たします。 Javaコードでは問題ありません。 – veritas1

+0

また、[PaperParcel](http://grandstaish.github.io/paperparcel/)を見て、すべてを生成することもできます。 – tynn

+0

親クラスCREATORを使用すると、デシリアライズ後、子クラスではなく親クラスのインスタンスになります。子クラス用のCREATORも記述する必要があります。 – BladeCoder

関連する問題