¡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.
private
no 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. @JvmOverloads
Implemente 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 @JvmOverloads
implementar 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:
Como puedes ver, el editor de kotlin nos ayudará automáticamente a generar tres constructores sobrecargados.
PS:
Cuando utilice una vista personalizada @JvmOverloads
basada 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.EditText
defStyleAttr
3. Inicialización perezosalateinit var
En el desarrollo diario, utilizaremos la lateinit var
inicializació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. @JvmField
Reducir la generación de conjuntos de propiedades y obtener métodos
Defina una variable:
var mData: String = ""
复制代码
Invertirlo en código Java:
Puede ver que el compilador automáticamente nos ayudará a generar mData
el conjunto y obtener métodos, si no desea compilar el conjunto y obtener métodos que nos ayuden a generar propiedades, puede agregar @JvmField
anotaciones:
@JvmField
var mData: String = ""
复制代码
Descompilar en código Java:
De esta forma, el sistema no nos ayudará a generar métodos get y set, porque el compilador cambia mData
el modificador de acceso apublic