У меня относительно сложный общий тип (скажем Map<Long,Map<Integer,String>>
), который я использую внутри класса. (Внешняя видимость отсутствует, это просто деталь реализации.) Я хотел бы скрыть это в typedef, но Java не имеет такого средства.
Вчера я снова открыл следующую идиому и был разочарован, узнав, что считается анти-шаблоном.
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 */
}
Может ли быть какое-либо оправдание для этого, когда тип скрыт и не является частью библиотечного API (который при моем чтении является основным возражением Goetz на его использование)?