Recently ran into a brick wall trying to pass a varargs parameter to another function that also has a varargs parameter.
A colleague mentioned the "spread" operator to me and it took me a little while to find information about it.
An example
package org.mrbear.kotlin enum class ErrorCode(val description: String) { OBJECT_NOT_FOUND("Object %s not found."), NO_DEFAULT_PROVIDED("No default provided for parameter %s."), MALFORMED_URL( "Malformed url (%s)" ) } abstract class MyException : Exception { constructor(errorCode: ErrorCode, cause: Throwable, vararg params: Any) : super( String.format( errorCode.description, *params ), cause ) constructor(errorCode: ErrorCode, vararg params: Any) : super(String.format(errorCode.description, *params)) } class ObjectNotFoundException(vararg params: Any) : MyException(ErrorCode.OBJECT_NOT_FOUND, *params)
Now to throw it in a test.
class ExceptionTest { @Test(expectedExceptions = [ObjectNotFoundException::class], expectedExceptionsMessageRegExp = "Object User mrbear not found.") fun testException() { throw ObjectNotFoundException("User mrbear") } }
References
- Kotlin - Variable number of arguments (varargs)
- https://kotlinlang.org/docs/functions.html#variable-number-of-arguments-varargs
- Kotlin - Java varargs
- https://kotlinlang.org/docs/java-interop.html#java-varargs
- Baeldung - Convert Kotlin Array to Varargs
- https://www.baeldung.com/kotlin/array-to-varargs
- Baeldung - Varargs in Java
- https://www.baeldung.com/java-varargs
No comments:
Post a Comment