Хочу сделать клас более гибким при помощи generics в kotlin. Ранее использовал их только в java и в очень примитивных случаях. Перечитал документацию от jetBrains но это ясности не дало. Пробовал так:
abstract class GraphWrapper<T>(var graphView: GraphView){
...
private var lineGraphSeries = HashMap<String, T>()
}
Как использовать правильно дженерики в котлине?
UPD: Вопрос немного изменился. Каким образом возможно создать обьект типа Т?
В этом плане Kotlin не сильно отличается от Java. В java обычно для этого используют паттерн абстрактная фабрика:
interface AbstractFactory<T> {
fun create(): T
}
Реализацию этой фабрики передают объекту который будут внутри созываться объекты нужного типа:
abstract class GraphWrapper<T>(var graphView: GraphView, private val factory: AbstractFactory<T>){
...
private var lineGraphSeries = HashMap<String, T>()
fun appendNew(alias: String) {
lineGraphSeries.put(alias, factory.create());
}
}
Либо условливаются, что объекты T обязательно должны содержать конструктор без аргументов и тогда достаточно передать Class<T> clazz, у которого для создания экземпляров вызывают clazz.newInstance().
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости