He las siguientes clasesLo que está mal con esta sintaxis de Java método genérico
KeyValue.java
package test;
public class KeyValue<T> {
private String key;
private T value;
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public T getValue() {
return value;
}
public void setValue(T value) {
this.value = value;
}
}
Reader.java
package test;
public interface Reader<T> {
<S extends T> S read(Class<S> clazz);
}
Test.java
package test;
import java.util.List;
public class Test {
public static void main(String[] args) {
List<KeyValue<Object>> list = find(KeyValue.class, new Reader<KeyValue<Object>>() {
@Override
public <S extends KeyValue<Object>> S read(Class<S> clazz) {
return null;
}
});
}
public static <T> List<T> find(Class<T> targetClass, Reader<T> reader) {
return null;
}
}
Aquí el método llama al find(......)
está fallando en tiempo de compilación con el mensaje de error
El hallazgo método (Clase, lector) en el tipo de prueba no es aplicable a los argumentos (Clase, nuevo lector>() {}).
Este método debe devolver el objeto del tipo List<KeyValue<Object>>
.
¿Qué hay de malo en este diseño y cómo solucionarlo?
Gracias.
Lo he cambiado, fue un error de mi parte. Ahora ambos son de tipo 'KeyValue'. –
¿Así que esto resolvió su problema? – BertNase
No, todavía tiene el error 'El método find (Clase, Reader ) en el tipo Prueba no es aplicable para los argumentos (Clase , nuevo Reader >() {})' –