Наиболее очевидным решением было бы добавить ссылку на объект Properties
как поле в ParserManager
, а затем либо предоставить ParserManager
объект свойств в качестве аргумента конструктора, либо через метод установки как показано ниже:
class ParserManager {
...
Properties props;
public void setParsingProperties(Properties props) {
this.props = props;
}
public void parse(String message) {
// props available here, without being passed as agurment.
}
}
class CallingParserManager {
...
void someMethod() {
...
parserManager.setParsingProperties(propertiesToUse);
parserManager.parse(theString);
...
}
...
}
Глядя на ваш предыдущий вопрос, я бы сказал, что было бы хорошо, если бы вы добавили setParsingProperties
в интерфейс Parser
. Метод может быть реализован как пустой метод для тех анализаторов, которым не нужны свойства.
Относительно ваших правок: Нет, так решить невозможно.
MessageObject mobject = (MessageObject) message;
Будет работать только в том случае, если MessageObject
является подтипом String
(но поскольку String
является окончательным (не может быть расширен), это не может иметь место).
Грязное быстрое исправление должно было бы проверить (с instanceof
), является ли Parser
экземпляром MessageCParser
, и привести его к типу, а затем использовать MessageCParser
специальный метод синтаксического анализа, который принимает Properties
аргумент.