2
votes

Comment initialiser une propriété avec un type inconnu dans Kotlin?

Je suis débutant à Kotlin et je fais actuellement une application Androïd à Kotlin. Je dois initialiser certaines propriétés dont les valeurs sont inconnues (ce n'est pas le cas mais c'est difficile à définir à partir de maintenant) donc j'aimerais faire comme dans TypeScript, par exemple: public startDate: any; qui signifie que le type de startDate peut être n'importe quoi (il n'est pas sécurisé mais cela aide quand même à obtenir la valeur, pas en ce qui concerne ce qui se passe).

Y a-t-il un moyen de le faire à Kotlin? J'ai essayé le '?' ou le * comme dans la liste <*> ou les paramètres mais cela ne fonctionne pas de cette façon.

Merci d'avoir lu!


5 commentaires

var startDate: object ?


N'utilisez pas object dans Kotlin, utilisez Any .


var startDate: Quelconque? = null est probablement la chose la plus proche, mais à mon humble avis, cela suggère de sérieux problèmes d'organisation du code.


Merci, cela devrait aider jusqu'à ce que nous résolvions ces problèmes d'organisation!


Je dois admettre que j'ai entendu dire qu'ils ont ajouté des types à TypeScript pour que vous n'ayez pas besoin d'utiliser aucun aussi souvent: P


3 Réponses :


0
votes

Comme Object comme classe de base dans java, vous pouvez utiliser Any dans kotlin.


0 commentaires

1
votes

Utilisez le type Any si la propriété peut contenir n'importe quel objet (mais pas null , ce qui implique qu'elle doit être initialisée immédiatement).

Utilisez le type Any? si la propriété peut contenir n'importe quel objet ou null . Cela équivaut au type Object de Java.


Du point de vue de la conception, c'est bien sûr plus agréable si vous connaissez le type réel et pouvez utiliser le système de type fort de Kotlin. Si vous ou votre équipe définissez les types, vous pouvez les contraindre à implémenter une certaine interface, afin de ne pas lui attribuer de valeurs arbitraires. Plus tard, lors de la refactorisation de l'application, vous pourrez supprimer cette interface et vous recevrez des erreurs de compilation pour toutes les occurrences, vous obligeant à la corriger correctement.


0 commentaires

0
votes

Comme mentionné, vous devez utiliser le type Any. Selon votre besoin, utilisez val ou var ( val vs var )

if (::myVar.isInitialized) {
    //use myVar
}


0 commentaires