Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

500
Vistas
¿Cómo resolver la herencia de segundo nivel con clases genéricas?

Estoy implementando una arquitectura MVP en Kotlin y Android Studio no muestra ningún error, sin embargo, no compila:

java.lang.AssertionError: el Descriptor resultante no debe ser nulo: CandidatoDescriptor: constructor BasePresenter (vista: Vista) definido en com.exmaple.base.BasePresenter sustitución: org.jetbrains.kotlin.types.IndexedParametersSubstitution@70144d7e en org.jetbrains.kotlin .resolve.calls.model.ResolvedCallImpl.setResultingSubstitutor(ResolvedCallImpl.java:205) ....

¿Es posible usar ConcreteView / ConcretePresenter en medio de la herencia?

código:

 /** * These are the base classes */ interface MvpView interface BaseView<Presenter : BasePresenter<*>> : MvpView, HasMvpView<MvpView> // to avoid circular dependency interface HasMvpView<View : MvpView> abstract class BaseMvpActivity<Presenter : BasePresenter<*>> : AppCompatActivity(), HasMvpView<MvpView> abstract class BaseMvpFragment<Activity : BaseMvpActivity<*>, Presenter : BasePresenter<*>>: Fragment(), HasMvpView<MvpView> { // this will cause the error abstract var presenter: Presenter } /** * There's a Viewpager, and each page looks the same the only difference is their source of data. That's why I tried implementing another level of abstraction over the base classes */ interface CategoryPagerView<Presenter: BasePresenter<*>> : BaseView<Presenter> abstract class CategoryPagerFragment: BaseMvpFragment<LandingActivity, BasePresenter<*>>() /** * A concrete type of the Viewpager's fragment, its presenter and the view */ interface ConcreteView : CategoryPagerView<ConcretePresenter> class ConcretePresenter(view: ConcreteView) : BasePresenter<*>(view) class ConcreteFragment : CategoryPagerFragment(), ConcreteView { // this line shows no error in the IDE, but in compile time override var presenter = ConcretePresenter(this)

¡Gracias por tu ayuda!

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Es un error de aserción interno lanzado por el compilador. Puede ver el código fuente del compilador donde se lanza esto:

https://github.com/JetBrains/kotlin/blob/master/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/model/ResolvedCallImpl.java

Aparentemente, el resultingDescriptor es null en un punto donde nunca debería ser null . Así que parece un error del compilador. Tal vez debería reescribirse en Kotlin para evitar problemas con null :)

Presente un informe de error en https://youtrack.jetbrains.com/issues/KT

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda