class Box<T>(val value: T)
val intBox = Box(123)
val stringBox = Box("Hello")
fun <T> singletonList(item: T): List<T> {
return listOf(item)
}
val list = singletonList(1)
val strings = singletonList("Hello")
fun <T : Comparable<T>> sort(list: List<T>) {
}
fun <T> process(value: T) where T : CharSequence, T : Comparable<T> {
}
interface Producer<out T> {
fun produce(): T
}
val stringProducer: Producer<String> = object : Producer<String> {
override fun produce() = "Hello"
}
val anyProducer: Producer<Any> = stringProducer
interface Consumer<in T> {
fun consume(item: T)
}
val anyConsumer: Consumer<Any> = object : Consumer<Any> {
override fun consume(item: Any) {
println(item)
}
}
val stringConsumer: Consumer<String> = anyConsumer
fun printArray(array: Array<*>) {
for (item in array) {
println(item)
}
}
inline fun <reified T> isInstance(value: Any): Boolean {
return value is T
}
println(isInstance<String>("Hello"))
println(isInstance<Int>("Hello"))