Trois compétences de développement Kotlin que vous devez connaître

Prenez l'habitude d'écrire ensemble ! C'est le 5ème jour de ma participation au "Nuggets Daily New Plan · April Update Challenge", cliquez pour voir les détails de l'événement .

1. Fonctions imbriquées

Dans le développement commercial, nous pouvons rencontrer un tel scénario : 一个函数只会被某一处多次调用,且不想让这个函数在该类的其他地方调用pour le moment, nous devons restreindre davantage l'accessibilité de cette fonction.

privaten'est pas satisfait, à ce stade, nous pouvons utiliser des fonctions imbriquées pour fournir une meilleure encapsulation :

fun test1() {

    //被限制访问行的函数
    fun test2(content: String) {
        println(content)
    }

    test2("hahaha")
    test2("babababa")
    test2("uuuuuuu")
}
复制代码

À l'heure actuelle, seuls test1()peuvent être consultés et test2()ne peuvent pas être consultés test1()par d'autres endroits, sauf

Cependant, test2()le corps de la méthode test1()est trop volumineux et la méthode est trop longue, elle 嵌套函数doit donc être utilisée de manière sélective en fonction de la scène spécifique.

2. @JvmOverloadsImplémentez rapidement la surcharge de fonctions

Lorsqu'Android personnalise View, il faut généralement définir trois méthodes de construction :

class CustomView : View {
    constructor(context: Context) : super(context)
    constructor(context: Context, attributes: AttributeSet? = null) : super(context, attributes)
    constructor(context: Context, attributes: AttributeSet? = null, defStyleAttr: Int) : super(
        context,
        attributes,
        defStyleAttr
    )
}
复制代码

Il est trop fastidieux d'écrire une vue personnalisée à chaque fois. À ce stade, vous pouvez emprunter et @JvmOverloadsimplémenter la surcharge d'opérateur :

class CustomView @JvmOverloads constructor(
    context: Context,
    attributes: AttributeSet? = null,
    defStyleAttr: Int = 0
) : View(context, attributes, defStyleAttr) {
}
复制代码

Décompilez en code Java et voyez :

image.png

Comme vous pouvez le voir, l'éditeur kotlin nous aidera automatiquement à générer trois constructeurs surchargés.

PS:Lorsque vous utilisez une vue personnalisée @JvmOverloadsbasée sur des composants existants WebView, assurez-vous de noter que la valeur par défaut du troisième paramètre n'est pas nécessairement 0 et que vous devez renseigner le paramètre correct en fonction du composant de classe parent hérité.EditTextdefStyleAttr

3. Initialisation paresseuselateinit var

Dans le développement quotidien, nous utiliserons l' lateinit varinitialisation paresseuse des propriétés d'implémentation :

lateinit var mContent: String

mContent = "test test"
复制代码

En utilisant des propriétés initialisées paresseuses, lorsque nous ne savons pas si la propriété a été initialisée, nous pouvons juger de la manière suivante :

//判断mContent有没有被初始化
if (this::mContent.isLateinit) {
    Log.i("CustomView", "test: ")
}
复制代码

4. @JvmFieldRéduisez la génération de jeu de propriétés et obtenez des méthodes

Définissez une variable :

var mData: String = ""
复制代码

Inversez-le en code Java :

image.png

Vous pouvez voir que le compilateur nous aidera automatiquement à générer mDatales méthodes set et get. Si vous ne souhaitez pas compiler les méthodes set et get qui nous aident à générer des propriétés, vous pouvez ajouter @JvmFielddes annotations :

@JvmField
var mData: String = ""
复制代码

Décompiler en code java :

image.png

De cette façon, le système ne nous aidera pas à générer les méthodes get et set, car le compilateur change mDatale modificateur d'accès enpublic

Je suppose que tu aimes

Origine juejin.im/post/7083264557367427080
conseillé
Classement