Bonjour,

J'ai un petit problème suite à l'utilisation (abusive) de méthodes génériques pour factoriser du code.

Je cherche en fait à instancier un objet au sein d'une méthode générique de la manière suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
private <T extends A> T instanciationSelective(boolean classeA) {
  T unObjet = null;          
  if (classeA)
    unObjet = new A();
  else
    unObjet = new B();
  return unObjet
}
avec la classe B héritant de la classe A

évidemment je vous le donne en mille, le compilo n'arrive pas à piger que unObjet est une instance de A ou de ses sous-classes et me sort deux bonnes grosses erreurs "incompatibles types" (found A required T et found B required T).

si je caste à l'instanciation, là j'ai le droit à l'habituel warning "unchecked cast".

Comment se sortir de là sans erreur ni warning ? Pourquoi dans les méthodes génériques la substitution n'est pas faite (alors que dans une classe générique, tout objet de type T aurait accès aux méthodes définies dans A)?

Merci
++