Tôi có một vấn đề "lạ" về Generics Java.Phương thức của lớp chung Java không áp dụng cho các đối số được chuyển qua
Trước tiên tôi liệt kê mã của tôi:
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());
}
}
Trong lớp ServiceTest, trình biên dịch phàn nàn rằng phương thức registry.register không áp dụng cho các đối số được truyền cho nó. Tôi thực sự không biết tại sao điều này xảy ra. Vì vậy, tôi rất mong được bạn giúp đỡ để giải quyết vấn đề này.
puhhh ... xin vui lòng định dạng mô tả của bạn ... :-) –
ở đâu 'T' tuyên bố trong 'ServiceProvider.getService()'? – hertzsprung