a continuación está mi función de extensión de Kotlin:
infix fun Int.send(data: String) { MsgSendUtils.sendStringMsg( this, data ) }llamado así:
8401 send "hi"y mi requisito es : la persona que llama debe tener más de 8400 .
¿Cómo puedo lograr eso?
Gracias !
En teoría, puedes usar la sintaxis @receiver:IntRange(from = 8400) para aplicar una anotación al receptor de una función:
infix fun @receiver:IntRange(from = 8400) Int.send(data: String) { MsgSendUtils.sendStringMsg(this, data) }Sin embargo, esto no parece desencadenar el error Android Lint como cabría esperar. Esta es probablemente una característica que falta en el propio linter al inspeccionar el código de Kotlin.
Una solución alternativa sería declarar la función de manera diferente (usando este valor como parámetro en lugar de receptor):
fun send(@IntRange(from = 8400) id: Int, data: String) { MsgSendUtils.sendStringMsg(id, data) } // or fun String.sendTo(@IntRange(from = 8400) id: Int) { MsgSendUtils.sendStringMsg(id, this) }De lo contrario, lo mejor que podría hacer en Kotlin puro sería verificar el valor en tiempo de ejecución:
infix fun Int.send(data: String) { require(this >= 8400) { "This value must be greater than 8400" } MsgSendUtils.sendStringMsg(this, data) } Tenga en cuenta que, dependiendo de lo que represente este valor, recomendaría usar un tipo más específico en lugar de Int . Por ejemplo, si su Int representa una ID, tal vez debería declarar una value class envuelva este entero. A continuación, puede aplicar las restricciones en el momento de la construcción (todavía en tiempo de ejecución, pero es menos propenso a errores).
Este enfoque también evitaría contaminar el autocompletado en todos los enteros, lo que puede ser bastante molesto en un gran proyecto dado lo específica que es esta función.