Tipo genérico de la interfaz con tipo genérico en la implementación -- java campo con generics campo con interface campo con abstract camp Relacionados El problema

Generic Type from Interface with Generic Type in Implementation


0
vote

problema

Español

Tengo un caso de uso muy común que cuelga con los genéricos en Java y no puedo enfocar cómo no es posible.

El siguiente ejemplo muestra que no es posible crear un tipo genérico en la interfaz para pasar la transacción general como tipo genérico con el método de implementación.

  interface MyInterface <T, I, O> {      public T method(T arg); }      abstract class MyAbstractClass <I , O> implements MyInterface<List<?>, I , O> {      // This cause a syntax-failure! What is wrong with this?       // And how can I manage my Generics like this?      @override      public abstract List<O> method(List<I> arg);  }  class MyImplementation extends MyAbstractClass <String , Integer> {      List<String> method(List<Integer> arg)      {          // ... implementation      } }   
Original en ingles

I have a very common use case dangling with Generics in JAVA and I can't focus how is this not possible.

The following example shows that it is not possible to create a Generic Type in Interface to further passing it as generic Type with in the implementing method.

interface MyInterface <T, I, O> {      public T method(T arg); }      abstract class MyAbstractClass <I , O> implements MyInterface<List<?>, I , O> {      // This cause a syntax-failure! What is wrong with this?       // And how can I manage my Generics like this?      @override      public abstract List<O> method(List<I> arg);  }  class MyImplementation extends MyAbstractClass <String , Integer> {      List<String> method(List<Integer> arg)      {          // ... implementation      } } 
           
 
 

Lista de respuestas

0
 
vote
vote
La mejor respuesta
 

No estoy seguro de que esto es realmente lo que quiere hacer, pero de esta manera funcionaría:

  interface MyInterface <T, I, O> {     T method(I arg); }  abstract class MyAbstractClass <O, I> implements MyInterface<List<O>, List<I> , O> {     @Override     public abstract List<O> method(List<I> arg); }  class MyImplementation extends MyAbstractClass <String , Integer> {     @Override     public List<String> method(List<Integer> arg) {         // ... implementation     } }   
 

I am not sure this is really what you want to do, but this way would work:

interface MyInterface <T, I, O> {     T method(I arg); }  abstract class MyAbstractClass <O, I> implements MyInterface<List<O>, List<I> , O> {     @Override     public abstract List<O> method(List<I> arg); }  class MyImplementation extends MyAbstractClass <String , Integer> {     @Override     public List<String> method(List<Integer> arg) {         // ... implementation     } } 
 
 
 
 

Relacionados problema

0  Ayuda de la tarea, Clases abstractas / de interfaz  ( Homework help abstract interface classes ) 
Soy nuevo para lidiar con Java y el curso que estoy tomando es mostrarme un código, pero cuando estoy tratando de ejecutarlo. Devuelve una excepción de punter...

1  Java PaintComponent Tamaño y posición en una subclase de una clase abstracta que extiende JPanel  ( Java paintcomponent size and position in a subclass of an abstract class that ex ) 
Estoy construyendo un juego de ajedrez simple y estoy atascado en intentar pintar dibujos en un panel Tengo una tabla lista y en la placa hay paneles. Esos ...

0  C # Clase genérica abstracta Crear instancia derivada  ( C sharp abstract generic class create derived instance ) 
Tengo una clase abstracta y n otro zumbido post_title | ID post_id | meta_key | meta_value -----------+--- --------+----------+----------- title ...

3  Java: define el método abstracto con números infinitos de param de cualquier tipo  ( Java define abstract method with infinite numbers of param of any type ) 
Actualmente estoy tratando de definir un método abstracto que permita un número infinito de parámetros, de cualquier tipo. ¿Qué? Quiero escribir algo co...

4  ¿Cómo inicializo un objeto de gráficos en Java?  ( How do i initialize a graphics object in java ) 
Este es el código: { "AWSEBDockerrunVersion": "1", "Authentication": { "Bucket": "<bucket>", "Key": "<key>" }, "Image": { "Name": "proj...

27  Herencia de componentes angular4 con clase abstracta  ( Angular4 components inheritance with abstract class ) 
Quiero definir una clase base para que mis componentes compartan algunas características. Así que empecé con: export abstract class BaseComponent { pro...

12  Método Java "Resumen como" con el cuerpo  ( Java abstract like method with body ) 
Hay las siguientes clases: public abstract class Super { public abstract void run(); } public class Sub1 extends Super { @Override public void...

1  ¿Por qué mi subs clase se considera una clase abstracta?  ( Why is my sub class considered a abstract class ) 
Así que para mi próximo juego, estoy creando clases para mejorar la arquitectura de mi juego. Tengo una clase abstracta llamada gamestate y todos los gamestat...

0  ¿Puedes acceder a la clase de concreto de la clase abstracta?  ( Can you access the concrete class from the abstract class ) 
Tengo una clase abstracta que representa un valor inmutable. Al igual que las cadenas, la clase inmutable tiene métodos que parecen cambiar la instancia, pero...

2  ¿Pasando un objeto a una clase abstracta?  ( Passing an object to an abstract class ) 
Estoy tomando un curso de programación en la universidad local. Mi instructor no habla el mejor inglés, así que a veces es difícil entender lo que está pidien...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos