你能幫我嗎?下面的代碼示例:Java泛型通配符擴展問題
public abstract class AbstractWorker {
public abstract void execute();
}
public class Config {
public final String name;
public Config(final String name) {
this.name = name;
}
}
public abstract class AbstractWorkerFactory<C extends Config> {
public abstract AbstractWorker createWorker(final C configuration);
}
public class Service {
public AbstractWorker caramba(final AbstractWorkerFactory<? extends Config> factory, final Config configuration) {
// it is not compile :(
return factory.createWorker(configuration);
}
}
下面的代碼工作
public <C extends Config> AbstractWorker caramba(final AbstractWorkerFactory<C> factory, final C configuration) {
return factory.createWorker(configuration);
}
但是代碼,使用服務無法指定泛型類型。是否有其他解決方案?
UPDATE(經過評估後):
1.集中工廠和配置實例在不同的地方(類)創建。
2.
public static class MegoConfig extends Config {
public static class WorkerFactory extends AbstractWorkerFactory<Config> {
public static class MegoWorkerFactory extends AbstractWorkerFactory<MegoConfig> {
MegoWorkerFactory支持MegoConfig和配置。
我的任務的新解決方案。
public AbstractWorker caramba(final AbstractWorkerFactory<? super MegoConfig> factory, MegoConfig configuration) {
return factory.createWorker(configuration);
}
new Service().caramba(new WorkerFactory(), new MegoConfig(""));
new Service().caramba(new MegoWorkerFactory(), new MegoConfig(""));
非常感謝大家的回答!
爲什麼使用Service的代碼不能指定泛型?它有一個AbstractWorkerFactory >,還是Java 1.4? – ILMTitan 2010-12-07 21:17:23