Tengo un tipo genérico relativamente complicado (digamos Map<Long,Map<Integer,String>>
) que uso internamente en una clase. (No hay visibilidad externa, es solo un detalle de implementación). Me gustaría ocultar esto en un typedef, pero Java no tiene esa facilidad.¿Hay alguna vez justificación para el "antipattern pseudo-typedef"?
Ayer redescubrí el siguiente modismo y me decepcionó saber que es considered an anti-pattern.
class MyClass
{
/* "Pseudo typedef" */
private static class FooBarMap extends HashMap<Long,Map<Integer,String>> { };
FooBarMap[] maps;
public FooBarMap getMapForType(int type)
{
// Actual code might be more complicated than this
return maps[type];
}
public String getDescription(int type, long fooId, int barId)
{
FooBarMap map = getMapForType(type);
return map.get(fooId).get(barId);
}
/* rest of code */
}
¿Puede haber alguna justificación alguna para este tipo cuando está oculto y no está formando parte de una API de biblioteca (que en mi lectura son la excepción principal de Goetz a usarlo)?
¿Llamas a ese tipo genérico complicado? ¡Decir ah! Cuando era pequeño teníamos que levantarnos a las 3 de la mañana con genéricos anidados recursivamente de seis niveles ... –
Sí ... sin zapatos ... cuesta arriba ... en la nieve ... – skaffman
@Marcus Downing : Y el séptimo nivel que desayuna en el restaurante al final de la recursión. ;-) – Mnementh