Sam
09/13/2018, 2:29 PMclass Container< T : Number > (private var value : T ) {
fun getContainedValue() : T = value
}
fun <T : Number > processContainer( container : Container<T> ) {
container.getContainedValue()
}
fun processContainer1( container : Container<Number> ) {
container.getContainedValue()
}
fun main(args: Array<String>) {
val intContainer = Container(2)
processContainer( intContainer )
processContainer1( intContainer ) // Errors
}marstran
09/13/2018, 2:30 PMSam
09/13/2018, 2:31 PMdiesieben07
09/13/2018, 2:32 PMcontainer.setValue(T) from inside processContainer, provided you had gotten a T out of the container beforehand. If you declare the parameter as out Number you cannot put anything in, only take Number out.diesieben07
09/13/2018, 2:34 PMfun <T : Number> processContainer(container: Container<T>) {
val t: T = container.getValue()
val updatedT: T = doStuffWithT(t)
container.setValue(t)
}diesieben07
09/13/2018, 2:34 PMContainer<out Number>.Sam
09/13/2018, 2:38 PMSam
09/13/2018, 2:40 PMdiesieben07
09/13/2018, 2:44 PMclass Container<out T>. That way you have the out implicitly everywhere it's used.Sam
09/13/2018, 2:46 PM