Mam stosunkowo skomplikowany typ ogólny (na przykład Map<Long,Map<Integer,String>>
), którego używam wewnętrznie w klasie. (Nie ma zewnętrznej widoczności, to tylko szczegół implementacji.) Chciałbym ukryć to w typedef, ale Java nie ma takiego obiektu.Czy istnieje kiedykolwiek uzasadnienie "antypapieru pseudo-typedef"?
Wczoraj ponownie odkryłem następujący idiom i byłem rozczarowany, aby dowiedzieć się, że to 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 */
}
Czy kiedykolwiek być żadnego usprawiedliwienia dla tego, jeśli typ jest ukryty i nie będących częścią API biblioteki (co w moim czytaniu są główne zarzuty Goetz, aby go używać)?
Nazywasz ten rodzaj ogólny skomplikowanym? Ha! Kiedy byłem chłopcem, musieliśmy wstać o 3 rano z sześciostopniową rekurencyjnie zagnieżdżoną generiką ... –
Tak ... bez butów ... pod górę ... w śniegu ... – skaffman
@Marcus Downing : A na siódmym poziomie jesz na śniadanie w restauracji na końcu rekursji. ;-) – Mnementh