У меня есть «странная» проблема с генериками Java.Метод класса generic класса Java неприменим для переданных аргументов
Сначала я перечисляю мой код:
Service.class
package jse.generics.service;
public interface Service {
}
ServiceProvider.class
package jse.generics.service;
public interface ServiceProvider<T extends Service> {
public T getService();
}
ServiceProviderRegistry.class
package jse.generics.service;
import java.util.HashMap;
import java.util.Map;
public class ServiceProviderRegistry<T extends Service> {
private Map<Class<T>, ServiceProvider<T>> map = new HashMap<Class<T>, ServiceProvider<T>>();
public void register(Class<T> clazz, ServiceProvider<T> provider) {
map.put(clazz, provider);
}
}
FooService.class
package jse.generics.service;
public class FooService implements Service {
}
FooServiceProvider.class
package jse.generics.service;
public class FooServiceProvider implements ServiceProvider<FooService> {
@Override
public FooService getService() {
return new FooService();
}
}
ServiceTest.class
package jse.generics.service;
public class ServiceTest {
/**
* @param args
*/
public static void main(String[] args) {
ServiceProviderRegistry<? extends Service> registry = new ServiceProviderRegistry<Service>();
registry.register(FooService.class, new FooServiceProvider());
}
}
В классе ServiceTest компилятор жалуется, что метод registry.register не применим для переданных ему аргументов. Я действительно не знаю, почему это происходит. Поэтому я с нетерпением жду, когда вы поможете вам решить эту проблему.
puhhh ... пожалуйста, формат описания ... :-) –
Где 'T' объявлен в 'ServiceProvider.getService()'? – hertzsprung