samir
05/25/2018, 3:17 PMinterface SomeInterface
enum class SomeEnum: SomeInterface { ValueA, ValueB }
fun someFun(array: Array<SomeInterface>) {}
fun calls() {
val val1 = arrayOf<SomeInterface>(SomeEnum.ValueA, SomeEnum.ValueB) // Array<SomeInterface>
val val2 = arrayOf(SomeEnum.ValueA, SomeEnum.ValueB) // Array<SomeEnum>
val val3 = SomeEnum.values() // Array<SomeEnum>
val val4 = SomeEnum.values() as Array<SomeInterface> // Array<SomeInterface>
someFun(arrayOf(SomeEnum.ValueA, SomeEnum.ValueB)) // Works
someFun(SomeEnum.values()) // Compiler error
someFun(val1) // Works
someFun(val2) // Compiler error
someFun(val3) // Compiler error
someFun(val4) // Works
}
Shawn
05/25/2018, 3:48 PMShawn
05/25/2018, 3:48 PM.toList()
extension method which helps a lotsamir
05/25/2018, 3:55 PMShawn
05/25/2018, 3:56 PMpublic class Array<T>
, which means T
is invariantShawn
05/25/2018, 3:57 PMNote: unlike Java, arrays in Kotlin are invariant. This means that Kotlin does not let us assign anto anArray<String>
, which prevents a possible runtime failure (but you can useArray<Any>
, see Type Projections).Array<out Any>
Shawn
05/25/2018, 4:00 PMsomeFun()
to accept Array<out SomeInterface>
but I imagine you do so at your own risksamir
05/25/2018, 4:01 PM