Kotlin android parcelable

ashur:

Je l' ai utilisé fonctionnalité autogénérés de plug - in android pour le studio android et il m'a généré le code suivant, mais je ne comprends pas pourquoi il est nécessaire final valpour le CREATORterrain? Je vois le finalmot - clé pour la première fois dans kotlin.

data class Person(
        val name: String,
        val surname: String
) : Parcelable {
    constructor(source: Parcel): this(source.readString(), source.readString())

    override fun describeContents(): Int {
        return 0
    }

    override fun writeToParcel(dest: Parcel?, flags: Int) {
        dest?.writeString(name)
        dest?.writeString(surname)
    }

    companion object {
        @JvmField final val CREATOR: Parcelable.Creator<Person> = object : Parcelable.Creator<Person> {
            override fun createFromParcel(source: Parcel): Person {
                return Person(source)
            }

            override fun newArray(size: Int): Array<Person?> {
                return arrayOfNulls(size)
            }
        }
    }
}
miensol:

Dans Kotlin, les classes et les membres sont définitifs par défaut . En d'autres termes, les déclarations suivantes ont le même bytecode:

@JvmField final val CREATOR: Parcelable.Creator<Person> = PersonCreator()
@JvmField val CREATOR: Parcelable.Creator<Person> = PersonCreator()

Ainsi, bien que le code généré ait un finalmot-clé et que ce ne soit pas une erreur, il est redondant.

Même si les classes et les membres sont définitifs par défaut, il existe toujours un besoin de finalmodificateur dans Kotlin. Un exemple serait de marquer la openméthode comme finaldans une classe dérivée:

open class Base {
    open fun test(){}
}

open class DerivedA : Base(){
    final override fun test(){}
}

class DerivedB : DerivedA() {
    override fun test(){} //error: 'test' in 'DerivedA' is final and cannot be overriden
}

Bien que ce soit une bonne pratique de créer un public staticchamp finalen Java, il n'y a aucune exigence stricte pour que le Parccelable.Creatorchamp soit marqué comme tel:

Les classes implémentant l'interface Parcelable doivent également avoir un champ statique non nul appelé CREATOR d'un type qui implémente l'interface Parcelable.Creator.

Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.

En cas d'infraction, veuillez [email protected] Supprimer.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

Android Parcelable pour Kotlin ne fonctionne pas

Android Parcelable dans Kotlin: CREATOR introuvable dans la classe de données Parcelable

Android Parcelable order

Parcelable ne fonctionne pas correctement dans Kotlin

kotlin, comment mettre HashMap dans Parcelable

Android Kotlin create class implémentation Parcelable donne une erreur de `` remplacement '' de la méthode writeToParcel

objet de perte Android parcelable

Parcelable Android - écrire nullable long

Android Parcelable JsonArray in Side JsonObject

android - unable to pass parcelable in Intent to another activity

Comment implémenter parcelable pour List<Integer> dans Kotlin

Implémenter parcelable avec kotlin sur une classe java existante

android.os.BadParcelableException: le protocole Parcelable nécessite un objet Parcelable.Creator appelé CREATOR

Comment ajouter un objet Java Socket à Parcelable dans Android

Utilisation de ClassLoader dans parcelable.readArrayList() sous Android

Android: comment implémenter Parcelable sur mes objets?

Qu'est-ce que Parcelable dans Android

Nombre magique incorrect pour Bundle avec Xamarin Android AIDL parcelable

Problèmes avec la classe de tableau parcelable dans Android

Implémentation Android Parcelable sans getters et setters

Comment extraire des données de Parcelable Object dans Android

Comment sérialiser un Parcelable en une chaîne dans Kotlin?

Kotlin - Hériter de la classe Java qui implémente Parcelable

Kotlin pour Android - Programmation Kotlin

Erreur Mockito dans Android: java.lang.ClassNotFoundException: android.os.Parcelable

RealmObject AND Parcelable

Kotlin in android studio

Android Kotlin - constructeur secondaire

Unité Android Kotlin CoroutineTest

TOP liste

  1. 1

    Filtrer le dataframe basé sur plusieurs colonnes d'un autre dataframe

  2. 2

    Laravel SQLSTATE [HY000] [1049] Base de données inconnue 'previous_db_name'

  3. 3

    Enregistrer le chemin de l'image de la galerie vers la base de données de la salle et l'afficher dans la liste des recycleurs

  4. 4

    Comment envoyer plusieurs variables de la lame au contrôleur

  5. 5

    Comment afficher du texte au milieu de div avec une couleur d'arrière-plan différente?

  6. 6

    Microsoft.WebApplication.targets

  7. 7

    Échec de l'exécution de 'insertBefore' sur 'Node': le paramètre 1 n'est pas de type 'Node'

  8. 8

    System.Data.SqlClient.SqlException: 'Nom de colonne non valide' ApplicationRoleId '.'

  9. 9

    Comment définir du texte dans un QLabel et afficher les caractères '<>'?

  10. 10

    Comment analyser un fichier avec un tableau d'objets JSON en utilisant Node.js?

  11. 11

    Concaténer des variables dans ansible

  12. 12

    Comment centrer un div tout en utilisant la transition et transformer avec l'échelle

  13. 13

    Filtrer les données en fonction des conditions d'une trame de données

  14. 14

    Comment changer le navigateur par défaut en Microsoft Edge pour Jupyter Notebook sous Windows 10 ?

  15. 15

    ESP8266 HADRWARE MINUTERIE, USA pour cocher une macro étrange

  16. 16

    comment afficher un bouton au-dessus d'un autre élément ?

  17. 17

    php ajouter et fusionner des données de deux tables

  18. 18

    Stop jQuery execution after one time execution

  19. 19

    Pourquoi Phantomjs ne fonctionne pas avec ce site ?

  20. 20

    obtenir le nombre de marqueur affiché sur la carte

  21. 21

    Redirection HTTP vers HTTPS dans Java à l'aide de HTTPURLConnection

chaudétiquette

Archive