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