Вторичный конструктор Kotlin с универсальным типом - PullRequest
0 голосов
/ 15 октября 2018

В Java

я могу получить два конструктора, такие как

public TargetTitleEntryController() { }

public <T extends Controller & TargetTitleEntryControllerListener> TargetTitleEntryController(T targetController) {
        setTargetController(targetController);
}

Я хочу преобразовать его в Kotlin

class TargetTitleEntryController ()

с помощью вспомогательного конструктора.Я не знаю, как объявить с универсальным типом, как Java аналог.

Ответы [ 2 ]

0 голосов
/ 13 апреля 2019

Вы можете сделать это так :)

class TargetTitleEntryController <T>() : Controller() where T: Controller, T: TargetTitleEntryControllerListener<T> {

 constructor(target: T) : this() {
        targetController = target
    }
}

вы можете реализовать это в родительском контроллере следующим образом:

class TargetDisplayController : Controller(), TargetTitleEntryControllerListener<TargetDisplayController> {

  var targetTitleEntryController = TargetTitleEntryController(this)

  override fun onTitlePicked(String option) {

  }

  override fun onAttach(view: View) {
  // push controller here
  }
}
0 голосов
/ 15 октября 2018

Вот пример, где вы указываете тип T, который реализует два интерфейса (CharSequence, Runnable):

class Person<T>(val name: String) where T : CharSequence, T : Runnable {
    constructor(name: String, parent: T) : this(name) {
    }
}

Так что на самом деле что-то подобное должно работать:

class TargetTitleEntryController<T> () where T : Controller, T : TargetTitleEntryControllerListener {
    constructor(targetController: T) : this() {
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...