Я пытаюсь изменить блок ниже, и нужно выяснить «правильный путь», чтобы сделать это:Java: что такое метод «лучших практик» для управления конструкторами классов для вызова при выполнении?
PRQ prq = new PRQ();
XYZ1 xyz1 = new XYZ1();
XYZ2 xyz2 = new XYZ2();
features = new ArrayList<MyFeature>();
// START OF MAIN BLOCK
// This is rigid: need to comment out lines and rebuild to exclude features
// Want to control this at execution time by a config file
//
features.add(new ABCFeatures());
features.add(new PRQFeatures(prq));
features.add(new XYZFeatures(xyz1,xyz2));
// ...
// END OF MAIN BLOCK
public class ABCFeatures extends MyFeature {
public ABCFeatures()
{
}
}
public class PRQFeatures extends MyFeature {
public PRQFeatures(final PRQ prq)
{
}
}
public class XYZFeatures extends MyFeature {
public XYZFeatures(final XYZ1 xyz1,final XYZ2 xyz2)
{
}
}
Таким образом, для каждых маркеров входных данных я вычисляю кучу разнородных признаков. Некоторым из них требуются ресурсы для вычисления, и они предоставляются при создании экземпляра (prq
, xyz1
, xyz2
).
Прямо сейчас, если я хочу поэкспериментировать, запустив мой код с отключенными функциями, мне нужно прокомментировать соответствующую строку features.add(new ...
, перестроить банку и затем повторно запустить. Слишком жестко! Я хочу контролировать это при выполнении, используя некоторый тип файла конфигурации, в котором указано, какие из функций включены и какие отключены.
Так 2 вопроса:
- Похоже, мне нужно использовать
getClass().getDeclaredConstructors()
, но я немного запутался о том, как именно это должно быть использовано - Относящиеся к # 1 Я предполагаю: Есть ли предпочтительный способ указать конфигурацию? То есть, должен ли он быть JSON/XML-файлом в определенном формате? Существуют ли существующие механизмы на Java для поддержки именно такого типа сценариев?
[ 'Preferences'] (https://docs.oracle.com/javase/ 8/docs/api/java/util/prefs/Preferences.html) может быть тем, что вы хотите. – resueman