Argumentos pnetworkingeterminados de Kotlin: prohíbe llamadas a cero arguments

En mi proyecto tengo una function como esta:

fun doCoolStuff(arg1: Int = 0, arg2: String? = null) { } 

Lo cual quiero que lo use en los siguientes casos:

 obj.doCoolStuff(101) // only first argument provided obj.doCoolStuff("102") // only second argument provided obj.doCoolStuff(103, "104") // both arguments provided 

Pero no en este:

 obj.doCoolStuff() // illegal case, should not be able to call the function like this 

¿Cómo logro esto en el nivel de syntax?

No hay syntax en Kotlin que le permita lograr lo que necesita. Use funciones sobrecargadas (usaría dos, una para cada argumento requerido):

 fun doCoolStuff(arg1: Int, arg2: String? = null) { ... } fun doCoolStuff(arg2: String?) { doCoolStuff(defaultIntValue(), arg2) } 

Esto no es posible porque ha hecho que ambos arguments sean opcionales. Puede agregar un cheque en el cuerpo del método o, lo que prefiero, proporcionar las sobrecargas adecuadas:

 fun doCoolStuff(arg1: Int) { doCoolStuff(arg1, null) } fun doCoolStuff(arg2: String?) { doCoolStuff(0, arg2) } fun doCoolStuff(arg1: Int, arg2: String?) {} 

Puede ser que no entiendo, pero esto funciona para mí

 fun doCoolStuff() { throw IllegalArgumentException("Can't do this") } 

Simplemente defina el método sin parameters y genere exception.

Puede declarar doCoolStuff() con cero parámetro y marcarlo como obsoleto con DeprecationLevel.ERROR .

 fun doCoolStuff(arg1: Int = 0, arg2: String? = null) {} @Deprecated("Should be called with at least one parameter", level = DeprecationLevel.ERROR) fun doCoolStuff() {}