Pourriez-vous s'il vous plaît aidez-moi? Exemple de code:Java Générique wildcard étend problème
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);
}
}
code suivant fonctionne
public <C extends Config> AbstractWorker caramba(final AbstractWorkerFactory<C> factory, final C configuration) {
return factory.createWorker(configuration);
}
Mais le code qui utilise le service ne pouvait pas spécifier le type générique. Est-il possible d'autre solution.
MISE À JOUR (après réponse par meriton):
1. L'usine de concentration et l'instance de configuration créent à différents endroits (classes).
2.
public static class MegoConfig extends Config {
public static class WorkerFactory extends AbstractWorkerFactory<Config> {
public static class MegoWorkerFactory extends AbstractWorkerFactory<MegoConfig> {
MegoWorkerFactory support MegoConfig et Config.
Nouvelle solution pour ma tâche.
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(""));
Un grand merci à tous pour votre réponse!
Pourquoi le code qui utilise Service ne peut-il pas spécifier le type générique? Avait-il une AbstractWorkerFactory >, ou était-ce Java 1.4? – ILMTitan