Comment implémenter des méthodes
statiques dans Kotlin similaires à Java ou C# Cet article résume plusieurs méthodes, à savoir : la fonction au niveau du package , le compagnon Object, fonctions d'extension et déclarations d'objet. Cela oblige chacun à choisir en fonction de différentes situations.
Vous pouvez trouver de nombreux articles de ce type sur Internet. La recommandation officielle concerne les fonctions au niveau du package, et certaines personnes disent d'utiliser des objets compagnons (compagnon
class). Ce sont de bonnes options, mais elles ne sont pas parfaites, et nous disposons de meilleures options dans différentes situations. J'ai résumé plusieurs méthodes, à savoir : les fonctions au niveau du package, les objets compagnons, les fonctions d'extension et les déclarations d'objets. Cela oblige chacun à choisir en fonction de différentes situations.
1. Fonctions au niveau du package
La différence entre Kotlin et Java et C# est que vous pouvez directement
déclarer des fonctions dans le emballer. La méthode est la même que dans la catégorie, je ne rentrerai donc pas dans les détails ici. C’est effectivement un très bon choix. Il convient aux méthodes où les fonctions n'ont pas besoin d'inclure des classes internes pour le partage de données.
2. Objet compagnon
Sémantiquement parlant, les fonctions compagnon sont très similaires aux méthodes statiques en Java, de sorte que les objets compagnon peuvent complètement implémenter des méthodes statiques en Java. Tous contenu de la classe. Mais utiliser des méthodes statiques en Java n’est parfois pas un choix. Dans Kotlin, les objets compagnons ne sont qu’une de nos options. Ensuite, je présenterai les objets compagnons.
Avez-vous déjà remarqué lorsque vous utilisez Java ? Quand les
variables statiques et les méthodes des classes Java sont-elles initialisées ? Est-ce lorsque la méthode statique est appelée pour la première fois ou lorsque la classe Java correspondante est chargée ? La réponse est lorsque la classe Java est chargée (c'est-à-dire que si vous avez appelé les variables d'instance et les méthodes dans la classe Java, même si vous n'avez pas utilisé de variables et de méthodes statiques, les variables statiques ont été initialisées). N’est-il pas approprié de qualifier ce phénomène d’accompagnant ?
Dans Kotlin, on considère qu'il existe deux types de choses dans une classe, l'un est constitué de variables d'instance et de méthodes dans les classes Java, et l'autre est de variables et de méthodes statiques dans les classes Java. Kotlin regroupe les instances et méthodes statiques dans une classe compagnon, et voilà à quoi cela ressemble. Un exemple est donné ci-dessous :
fun main(args: Array<String>) {
Books.getBestSellers()
}
class Books(var name: String, val page: Int) {
fun getWordCount()=page*100
companion object ComBooks{
var bestSellers=arrayOf("Harry Potter\r\t","Lord of the Rings\r\t")
fun getBestSellers() {
bestSellers.forEach{v->println(v)}
}
}
}
Copier après la connexion
La classe compagnon est déclarée avec compagnon. Elle est chargée dans la classe où se trouve l'objet compagnon, et l'objet compagnon est initialisé, tout comme les membres statiques Java. Elle peut être anonyme ou porter le même nom que la classe conteneur. Il existe deux types d'appels :
ou Books.ComBooks.getBestSellsers()?
Books.getBestSellsers()?。
3. Fonction d'extension
En Java, on écrit souvent des classes Utils , ces classes effectuent souvent des opérations sur un certain objet qui correspondent à ses fonctions et à leurs propres programmes. La plupart des méthodes sont des méthodes statiques, par exemple :
public class Utils {
public static boolean isEmpty(String string){
return string != null && string.length() == 0;
}
public static boolean isWeakEmpty(String string){
return isEmpty(string) && string.trim().length() == 0;
}
}
Copier après la connexion
Bien sûr, nous pouvons utiliser les deux méthodes ci-dessus pour implémenter ces méthodes statiques, mais nous avons une meilleure méthode.
fun String.isEmpty() = this != null && this.length == 0;
fun String.isWeakEmpty()= this.isEmpty() && this.trim().length == 0
Copier après la connexion
Les deux lignes de code ci-dessus étendent la classe String avec deux fonctions. Ces deux fonctions peuvent être appelées comme leurs fonctions natives. Le code est très beau. En fait, la fonction d'extension ne modifie pas le contenu interne de la classe String et n'ajoute que deux fonctions statiques à String. Cependant, par rapport à la classe Utils de Java, la lisibilité a été grandement améliorée.
4. Déclaration d'objet
Continuez à considérer la classe Utils ci-dessus. Toutes les méthodes (et parfois les variables) de cette classe sont statiques, ceci. La méthode n'a pas du tout besoin d'être instanciée. En Java, nous déclarons souvent ce type comme une classe statique. Existe-t-il une bonne solution à cette situation dans Kotlin ? Existe-t-il une meilleure solution que les objets compagnons ? Bien sûr, la déclaration d’objet en est une.
La déclaration d'objet est très facile à comprendre. Elle utilise le mot-clé object pour déclarer un objet. Des variables et des méthodes peuvent être utilisées dans l'objet, telles que :
object AppInfo{
var AppName = "Kotlin Message"
var AppAuthor = "Riley Ge"
fun toSimpleString() {
println("AppName:$AppName,AppAuthor:$AppAuthor")
}
}
Copier après la connexion
Découvrir. Objets Kotlin Quelle puissance ! Une chose à laquelle tout le monde devrait prêter attention est qu'AppInfo est initialisé paresseusement lors du premier accès, ce qui signifie qu'AppInfo n'est pas initialisé lorsque l'objet est déclaré.
5. Résumé
Après avoir parlé de tant de méthodes, personne ne s'inquiète du fait que Kotlin n'ait pas de méthodes statiques maintenant, n'est-ce pas ? Je ne l'ai pas juste à cause de lui. Je peux faire mieux. De plus, Kotlin vous offre également plus de choix. Vous pouvez choisir la méthode appropriée en fonction de votre situation réelle pour rendre votre code efficace et beau.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!