У меня есть следующие перечисления:Есть ли что-то не так с локальным классом определяется с п тела конструктора
enum FilterFactory {
INSTANCE;
private final Map<FilterType, Creator> creators;
private FilterFactory() {
creators = new HashMap<>();
class SimplCreator implements FilterCreator{
@Override
public FilterDTO createDto() {
return new FilterDTO();
}
} //Local class within the constructor
creators.put(FilterType.DATE, new FilterCreator(){
@Override
public FilterDTO createDto() {
return new DynamicDTO();
}
});
creators.put(FilterType.DROP_DOWN_LIST, new SimplCreator());
creators.put(FilterType.FIELD, new SimplCreator());
}
private static interface Creator{
public FilterDTO createDto();
}
//Other staff
}
Дело в том, я никогда не использовал местные классы в застройщиках органов. Может ли это вызвать некоторые ошибки, неужели это плохо? Кроме того, конструктор конструктора enu.
Нет ничего плохого в этом. На самом деле, это, вероятно, хорошая практика, так как нет необходимости усложнять код для других разработчиков, предоставляя SimplCreator вне метода, который его использует. (Кстати, если FilterType является перечислением, вы, вероятно, должны использовать [EnumMap] (http://docs.oracle.com/javase/8/docs/api/java/util/EnumMap.html), а не HashMap.) – VGR
@ VGR Exccellent poitn. Действительно, я должен. Спасибо. –
Кроме того, если вы используете Java 8, это звучит как работа для lambdas :) – yshavit