Java generic : Factory

Oula, prise de tête aujourd’hui : un warning java vraiment chiant : Type safety: The expression of type XXX needs unchecked conversion to conform to XXX.

Tout vient d’une classe toute bête permettant d’instancier une classe générique :

  1. public class BasePresentationConverterImpl<T extends IBaseDTO, E extends IBaseVO> extends
  2.         BaseGenericConverter implements IBasePresentationConverter<T, E> {
  3.  
  4.     private BasePresentationConverterImpl(Class<? extends Object> classMappingA,
  5.             Class<? extends Object> classMappingB) {
  6.     }
  7.  
  8.     public synchronized static BasePresentationConverterImpl getInstance(
  9.             Class<? extends Object> pClassDTO, Class<? extends Object> pClassVO) {
  10.         return new BasePresentationConverterImpl(pClassDTO, pClassVO);
  11.     }
  12. }

Le getInstance retournant un objet non typé, le compilateur émet un warning de type « needs unchecked conversion ». C’est chiant d’une part et ça plombe les stats de l’application (augmentation du nombre de warning).

Donc on refactor tout ça :

  1. public class BasePresentationConverterImpl<T extends IBaseDTO, E extends IBaseVO> extends
  2.         BaseGenericConverter implements IBasePresentationConverter<T, E> {
  3.  
  4.     private BasePresentationConverterImpl(Class<? extends Object> classMappingA,
  5.             Class<? extends Object> classMappingB) {
  6.         setClassMappingA(classMappingA);
  7.         setClassMappingB(classMappingB);
  8.     }
  9.  
  10.     public synchronized static <X extends IBaseDTO, Y extends IBaseVO> BasePresentationConverterImpl<X, Y> getInstance(
  11.             Class<X> pClassDTO, Class<Y> pClassVO) {
  12.         return new BasePresentationConverterImpl<X, Y>(pClassDTO, pClassVO);
  13.     }
  14. }

Et voila, on peut utiliser des objets bien typés partout dans l’appli sans cast à tords et à travers. Et bien sur sans warning c’est ce qu’on voulait, non ?

Le commentaires sont fermés.