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.
private
n'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. @JvmOverloads
Implé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 @JvmOverloads
implé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 :
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 @JvmOverloads
basé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é.EditText
defStyleAttr
3. Initialisation paresseuselateinit var
Dans le développement quotidien, nous utiliserons l' lateinit var
initialisation 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. @JvmField
Ré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 :
Vous pouvez voir que le compilateur nous aidera automatiquement à générer mData
les 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 @JvmField
des annotations :
@JvmField
var mData: String = ""
复制代码
Décompiler en code java :
De cette façon, le système ne nous aidera pas à générer les méthodes get et set, car le compilateur change mData
le modificateur d'accès enpublic