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 :
-
public class BasePresentationConverterImpl<T extends IBaseDTO, E extends IBaseVO> extends
-
BaseGenericConverter implements IBasePresentationConverter<T, E> {
-
-
private BasePresentationConverterImpl(Class<? extends Object> classMappingA,
-
Class<? extends Object> classMappingB) {
-
}
-
-
public synchronized static BasePresentationConverterImpl getInstance(
-
Class<? extends Object> pClassDTO, Class<? extends Object> pClassVO) {
-
return new BasePresentationConverterImpl(pClassDTO, pClassVO);
-
}
-
}
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 :
-
public class BasePresentationConverterImpl<T extends IBaseDTO, E extends IBaseVO> extends
-
BaseGenericConverter implements IBasePresentationConverter<T, E> {
-
-
private BasePresentationConverterImpl(Class<? extends Object> classMappingA,
-
Class<? extends Object> classMappingB) {
-
setClassMappingA(classMappingA);
-
setClassMappingB(classMappingB);
-
}
-
-
public synchronized static <X extends IBaseDTO, Y extends IBaseVO> BasePresentationConverterImpl<X, Y> getInstance(
-
Class<X> pClassDTO, Class<Y> pClassVO) {
-
return new BasePresentationConverterImpl<X, Y>(pClassDTO, pClassVO);
-
}
-
}
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 ?