Котлин: Реализовать универсальный интерфейс несколько раз с разными подклассами (базовый класс - ограничение) - PullRequest
0 голосов
/ 07 февраля 2019

Сообщение об ошибке: параметр типа E в SchedulableInserter имеет несовместимые значения: Incident, Assignment

Так что в основном у меня есть абстрактный класс Schedulable.Также у меня есть два класса Incident (единичное событие, например отметка времени) и класс Assignment (в основном, инцидент, но с продолжительностью). У меня есть MainActivity, куда я хочу вставить экземпляры в SQLiteDB.Я хочу иметь разные методы вставки для каждого подкласса Schedulable, чтобы легко обрабатывать различия между ними.

// SchedulableInserter.kt

interface SchedulableInserter<E> where E : Schedulable{
        fun onInsertSchedulable(item:E)
}

// MainActivity.kt

class MainActivity() : AppCompatActivity(),
    NavigationView.OnNavigationItemSelectedListener,
    SchedulableInserter<Incident>, SchedulableInserter<Assignment> {
 /* ^                                ^
    |                                |
   Sadly Kotlin says:
   Type parameter E of 'SchedulableInserter' has inconsistent values: 
   Incident, Assignment
   A Supertype apperars twice
*/
}

Я имею в виду, что я мог бы дифференцироваться в методе, если бы я связал SchedulerInserter с Schedulable, но я был бы признателен за то, чтобы этого не делать.

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Что бы я посоветовал, чтобы в качестве действия в деятельности использовались вставки вместо реализованных интерфейсов:

class MainActivity() : AppCompatActivity(),
    NavigationView.OnNavigationItemSelectedListener {
    val incidentInserter = SchedulableInserter<Incident> { ... }
    val assignmentInserter = SchedulableInserter<Assignment> { ... }
}

Чтобы сделать этот синтаксис доступным для вас в настоящее время необходимо определить SchedulableInserter в Java вместо Kotlin;в противном случае вы должны написать

    val incidentInserter = object : SchedulableInserter<Incident> { 
        override fun ...
    }
0 голосов
/ 07 февраля 2019

Ответил Бен П.

Решение:

Я имею в виду, что я мог бы дифференцироваться в методе, если бы я связал SchedulerInserter с Schedulable, но я был бы признателен за то, чтобы этого не делать.

...