我有一个关于 Java 泛型的“奇怪”问题。
首先我列出我的代码:
服务类
package jse.generics.service;
public interface Service {
}
服务提供者.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();
}
}
服务测试类
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 方法不适用于传递给它的参数。我真的不知道为什么会发生这种情况。所以我期待着你的帮助来解决这个问题。