J'ai suivi du code: pendant que je peux faire cette fonction à l'intérieur de cet objet: p> est-il possible de faire quelque chose Comme commonutil.10.dp () code> aussi d'une autre classe? p> p>
3 Réponses :
Vous pouvez faire ce que vous voulez faire de ce que vous voulez comme suit:
fun Int.dp(): Int = (this / Resources.getSystem().displayMetrics.density).toInt() fun Int.px(): Int = (this * Resources.getSystem().displayMetrics.density).toInt()
int code> en tant que paramètre, pas en tant que récepteur:
XXX PRE> LI>
- déclarant
int.dp () code> comme une fonction de niveau supérieur, si vous n'avez pas besoin de données de CommonUtil code> (comme dans votre cas), ou si vous le pouvez Déclarez ces données comme public code> ou interne code>:
XXX PRE> LI>
ul> Si votre CommonUtil code> L'objet ne stocke pas de données et contient simplement des fonctions utilisées, il vaut bien mieux se débarrasser de cet objet et faire tout son niveau de haut niveau. Par exemple, votre fichier commonutil.kt code> peut ressembler à ceci: p> xxx pré> afin que vous puissiez écrire 10. dp () code> n'importe où dans votre code. p> p>
Désolé, je ne comprends pas vraiment votre dernière déclaration, voulez-vous dire que je dois la mettre dans ma classe d'activité supérieure à la place?
Avez-vous un exemple simple pour cela? Ce sera très utile :)
Je voulais dire la même chose qu'un autre répondeur a fait. Mise à jour de ma réponse.
Ah oui! J'ai ce fichier 'commintutil.kt' contenant ce code, alors je demandais comment l'appeler de mes autres classes (ma classe de vision personnalisée spécifiquement). Donc, je suppose que ma structure de code est toujours bien hmm. Désolé, je n'ai que 2 jours à Kotlin lol et j'avais l'habitude de coder comme ceci dans Java d'Android, mais j'ai trouvé cette extension comme une nouvelle chose intéressante.
En supposant que vous souhaitez étendre les fonctionnalités de l'INT (par exemple, dans TargetModule.kt), promouvoir les fonctions d'extension comme fonction de niveau supérieur dans le module définissant et les importer dans l'utilisation du module. Par exemple,
Cela marche! Je suis toujours intéressé par la déclaration de réponse de l'autre personne cependant. Merci!!
Les fonctions d'extension doivent être définies comme des fonctions au niveau du paquet. Donc, il vous suffit de supprimer simplement l'objet CommonUtil et placez la fonction d'extension directement dans un fichier KOTLIN.
fun Int.dp(): Int = (this / Resources.getSystem().displayMetrics.density).toInt() fun Int.px(): Int = (this * Resources.getSystem().displayMetrics.density).toInt()