Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


¿Por qué tengo un error cuando intento anular un enlace genérico con Guice? (TypeLiteral)

Me gustaría reemplazar un enlace de tipo genérico, pero siempre obtuve el mismo error " No implementation was bound ".

Estoy usando roboguice 3.

He aquí un ejemplo de código que uso:

 public interface IParser<I, O> {} public class Parser1 implements IParser<String, String> { IParser<String, String> mParser; @Inject public Parser1(IParser<String, String> parser) { mParser = parser; } } public class Parser2 extends Parser1 { @Inject public Parser2(IParser<String, String> parser) { super(parser); } } public class MyModule extends AbstractModule { @Override protected void configure() { bind(new TypeLiteral<IParser<String, String>>() {}).to(new TypeLiteral<Parser1>() {}); } } 

Y aquí está mi creación de inyector:

 RoboGuice.getOrCreateBaseApplicationInjector(this, RoboGuice.DEFAULT_STAGE, RoboGuice.newDefaultRoboModule(this), Modules.override(new MyModule()).with(new AbstractModule() { @Override protected void configure() { bind(new TypeLiteral<IParser<String, String>>() {}).to(new TypeLiteral<Parser2>() {}); } }) ); 

Si no intento anularlo (sólo el usuario Parser1), todo está bien, cuando anule el objeto estándar con los proveedores, funciona bien también, pero no con TypeLiteral.

Mi error es:

 com.google.inject.CreationException: Unable to create injector, see the following errors: 1) No implementation for IParser<String, String> was bound. 

¿Qué estoy haciendo mal?

Gracias.

  • Convertir un entero en una cadena sin asignar memoria
  • Animar el ángulo de barrido de Android Ring Shape
  • Actualización del componente UI de actividad de Broadcast Receiver?
  • Hacer que el teclado Android resista a los ataques de KeyLogger
  • Cómo capitalizar cada letra en un Android EditText?
  • Crea una biblioteca nativa de Android con Adobe Air
  • (Retrofit) No se pudo localizar el convertidor para la aplicación de bloqueo de clase
  • Cómo simular la muerte de la aplicación de Android GC
  • 2 Solutions collect form web for “¿Por qué tengo un error cuando intento anular un enlace genérico con Guice? (TypeLiteral)”

    Usted debe cambiar la definición de las clases que se implementan su interfaz.

    Prueba esto:

     public class Parser1<I, O> implements IParser<I, O> { } public class Parser2<I, O> extends Parser1<I, O> { } 

    Y luego puede vincular su interfaz a la clase de esta manera:

     bind(new TypeLiteral<IParser<String, String>>() {}).to(new TypeLiteral<Parser1<String, String>() {}); 

    No estoy seguro, pero me parece notable que un enlace a una instancia conrete se utiliza en lugar de una Class :

    Bind (new TypeLiteral> () {}). A ( nuevo TypeLiteral () {} );

    has probado

     bind(new TypeLiteral<IParser<String, String>>() {}).to(Parser2.class}); 

    ?

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.