Je pense que je peux être victime d'un effacement de type, mais j'ai pensé que je verrais d'abord avec les autres ici.Java Generics Issue (avec Spring)
J'ai l'obligation de faire quelque chose comme ceci:
public interface FooFactory {
public <T extends Bar> Foo<T> createFoo(Class<T> clazz);
}
Il est parfaitement valide pour écrire ce code. Cependant, j'essaye d'implémenter cette fonctionnalité en utilisant un ressort BeanFactory
et je ne peux pas le faire.
Ce que je voudrais faire est ce ...
public class FooFactoryImpl implements BeanFactoryAware {
private BeanFactory beanFactory;
public <T extends Bar> Foo<T> createFoo(Class<T> clazz) {
return beanFactory.getBean(?????????);
}
public void setBeanFactory(BeanFactory beanFactory) {
this.beanFactory = beanFactory;
}
}
Comme vous pouvez le voir, je l'ai mis dans ???????? où je voudrais récupérer un haricot de type Foo<T>
, où T étend Bar. Cependant, il n'est pas possible de dériver un objet Class de type Foo<T>
et donc je suppose que ce que j'essaie de faire est impossible?
Quelqu'un d'autre voit un moyen de contourner cela ou une autre façon de mettre en œuvre ce que je suis en train de faire?
Merci,
Andrew
À quoi sert le paramètre 'clazz'? –
Pourquoi essayez-vous d'utiliser une usine de haricots? Vous pouvez certainement utiliser la configuration Spring standard pour y parvenir? –
@Rob utilise parfois des usines de haricots pour obtenir un contrôle plus fin de la durée de vie que ce que vous pouvez obtenir en contrôlant simplement la paresse, ou pour profiter d'un prototype pour obtenir plusieurs instances. – bmargulies