generic в kotlin

109
19 октября 2019, 14:20

Хочу сделать клас более гибким при помощи generics в kotlin. Ранее использовал их только в java и в очень примитивных случаях. Перечитал документацию от jetBrains но это ясности не дало. Пробовал так:

abstract class GraphWrapper<T>(var graphView: GraphView){
...
  private var lineGraphSeries = HashMap<String, T>()
}

Как использовать правильно дженерики в котлине?

UPD: Вопрос немного изменился. Каким образом возможно создать обьект типа Т?

Answer 1

В этом плане 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().

READ ALSO
Ошибка при отправке JSON пакета с jQuery на Java Spring RestController

Ошибка при отправке JSON пакета с jQuery на Java Spring RestController

При отправки JSON пакета с отдельного HTML файла на Java Spring RestController при помощи jQuery, java выдает предупреждение :

101
Java Hibernate PersistenceBag

Java Hibernate PersistenceBag

Как заставить хибер возвращать не PersistenceBag, а list или set?

117
Коррекция данных в TextField

Коррекция данных в TextField

Мне требуется корректировать данные в некотором TextField непосредственно в процессе вводаЧего конкретно я пытаюсь достичь:

91
Выполнение системных команд из-под Java (Runtime.exec)

Выполнение системных команд из-под Java (Runtime.exec)

Нуждаюсь в пояснении синтаксиса "системных команд" для параметра метода exec()

95