KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I have a "strange" problem about Java generics. First I list my code: 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()); } } In the ServiceTest class the compiler complaints that the registry.register method is not applicable for arguments passed to it.I really don't know why this happens. So I am looking forward to you guy's help to solve this problem.
Tags (comma-separated)
Save Edits
Cancel