Mensaje de error: el parámetro de tipo E de 'SchedulableInserter' tiene valores incoherentes: incidente, asignación
Básicamente, tengo una clase abstracta Programable. También tengo dos clases de Incidente (evento único, como una marca de tiempo) y una clase de Asignación (Básicamente un Incidente pero con una duración también). Tengo una Actividad Principal, donde quiero insertar Instancias en un SQLiteDB. Quiero tener un método de inserción diferente para cada subclase de Schedulable para manejar fácilmente las diferencias entre ellos.
//InsertorProgramable.kt
interface SchedulableInserter<E> where E : Schedulable{ fun onInsertSchedulable(item:E) }//ActividadPrincipal.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 */ }Quiero decir que podría diferenciar dentro del método si vinculo SchedulerInserter a Schedulable, pero agradecería no tener que hacer eso.
Lo que sugeriría es tener los insertadores como propiedades en la actividad en lugar de interfaces implementadas:
class MainActivity() : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener { val incidentInserter = SchedulableInserter<Incident> { ... } val assignmentInserter = SchedulableInserter<Assignment> { ... } } Para que esa sintaxis esté disponible, actualmente necesita definir SchedulableInserter en Java en lugar de Kotlin; de lo contrario tienes que escribir
val incidentInserter = object : SchedulableInserter<Incident> { override fun ... }Respondido por Ben P.
Solución:
Quiero decir que podría diferenciar dentro del método si vinculo SchedulerInserter a Schedulable, pero agradecería no tener que hacer eso.