Tres habilidades de desarrollo de Kotlin que necesitas saber

¡Acostúmbrate a escribir juntos! Este es el quinto día de mi participación en el "Nuevo plan diario de Nuggets · Desafío de actualización de abril", haga clic para ver los detalles del evento .

1. Funciones anidadas

En el desarrollo empresarial, podemos encontrarnos con este escenario: 一个函数只会被某一处多次调用,且不想让这个函数在该类的其他地方调用en este momento, necesitamos restringir aún más la accesibilidad de esta función.

privateno está satisfecho, en este momento podemos usar funciones anidadas para proporcionar una mejor encapsulación:

fun test1() {

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

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

En este momento, solo test1()se puede acceder y test2()no se puede acceder test1()desde otros lugares, excepto

Sin embargo, test2()el cuerpo del método test1()es demasiado grande y el método es demasiado largo, por lo que 嵌套函数debe usarse de forma selectiva según la escena específica.

2. @JvmOverloadsImplemente rápidamente la sobrecarga de funciones

Cuando Android personaliza View, generalmente es necesario definir tres métodos de construcción:

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
    )
}
复制代码

Es demasiado engorroso escribir una vista personalizada cada vez. En este momento, puede tomar prestada e @JvmOverloadsimplementar la sobrecarga de operadores:

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

Descompilar en código Java y ver:

imagen.png

Como puedes ver, el editor de kotlin nos ayudará automáticamente a generar tres constructores sobrecargados.

PS:Cuando utilice una vista personalizada @JvmOverloadsbasada en componentes existentes WebView, asegúrese de tener en cuenta que el valor predeterminado del tercer parámetro no es necesariamente 0, y debe completar el parámetro correcto de acuerdo con el componente de clase principal heredado.EditTextdefStyleAttr

3. Inicialización perezosalateinit var

En el desarrollo diario, utilizaremos la lateinit varinicialización diferida de las propiedades de implementación:

lateinit var mContent: String

mContent = "test test"
复制代码

Usando propiedades inicializadas perezosas, cuando no estamos seguros de si la propiedad se ha inicializado, podemos juzgar de las siguientes maneras:

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

4. @JvmFieldReducir la generación de conjuntos de propiedades y obtener métodos

Defina una variable:

var mData: String = ""
复制代码

Invertirlo en código Java:

imagen.png

Puede ver que el compilador automáticamente nos ayudará a generar mDatael conjunto y obtener métodos, si no desea compilar el conjunto y obtener métodos que nos ayuden a generar propiedades, puede agregar @JvmFieldanotaciones:

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

Descompilar en código Java:

imagen.png

De esta forma, el sistema no nos ayudará a generar métodos get y set, porque el compilador cambia mDatael modificador de acceso apublic

Supongo que te gusta

Origin juejin.im/post/7083264557367427080
Recomendado
Clasificación