Что не так с синтаксисом этого универсального метода Java

У меня есть следующие классы

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;
    }

}

Здесь вызов метода find (......) завершается ошибкой во время компиляции с сообщением об ошибке

Метод find (Class, Reader) в Тип Test не применим для аргументов (Class, new Reader> () {}).

Этот метод должен возвращать объект типа List > .

Что такое неправильно с этим дизайном и как это исправить.

Спасибо.

6
задан Arun P Johny 13 May 2011 в 07:40
поделиться