У меня есть интерфейс и его реализации:Добавление новых реализаций безопасно
public interface SyntaxConstruction{
public String parseFromString(String str);
}
public class Copy implements SyntaxConstruction{
public String parseFromString(String str){ //impl };
}
public class Set implements SyntaxConstruction{
public String parseFromString(String str){ //impl };
}
У меня также есть следующий класс:
public class Parser{
private static List<SyntaxElement> elementPrototypes; //should maintain the list of all implementation's prototypes
static{
//Initializing list with prtotypes of all possible SyntaxConstruction's implementations
}
public static List<SyntaxElement> parse(String str){
//getting syntax elements from str
}
}
Теперь мы добавим новую реализацию, скажем
public class Values implements SyntaxConstruction{
public String parseFromString(String str){ //impl };
}
Если пользователь, добавивший класс, не обновляет список elementPrototypes
, это может привести к едва уловимым ошибкам. Я бы хотел, чтобы они были осведомлены об обновлении списка безопасно?
Что он должен там обновить? 'elementPrototypes' даже не инициализирован, поэтому мы не знаем, что он содержит :(Если он должен содержать каждую реализацию, то не позволяйте кому-то« заполнять »его и делать это самостоятельно, используя отражение: http: // stackoverflow.com/questions/347248/how-can-i-get-a-list-of-all-the-implementations-of-an-interface-programmatically – Tom
@Tom Не могли бы вы посмотреть обновленный вопрос? – user3663882
Написание новая реализация нарушает существующую функциональность? Пахнет как плохой дизайн. – fabian