Java.
, , Animal. Cat Dog, Cat , , Cat .
, , Cat Dog, .
, , :
abstract class DataContainer(public val path: String)
abstract class CatDataContainer(path: String): DataContainer(path)
abstract class DogDataContainer(path: String): DataContainer(path)
DataContainer .
, , :
class TypedContainerHolder1<D: DataContainer> {
val preloaded: MutableMap<Class<out D>, HashSet<out D>> = hashMapOf()
fun get(clazz: Class<D>): HashSet<out D>? = preloaded[clazz]
}
val typedContainerHolder1 = TypedContainerHolder1<CatDataContainer>()
, , , , /. .
class TypedContainerHolder2<D: DataContainer> {
inner class PreloadedMap<MapType : D> : Map<Class<out MapType>, HashSet<out MapType>> by hashMapOf()
private val preloaded = PreloadedMap<D>()
fun get(clazz: Class<D>): HashSet<out D>? = preloaded[clazz]
}
val typedContainerHolder2 = TypedContainerHolder2<DogDataContainer>()
, . , .