Проблема автоматического подключения при создании объектов с помощью методов
Я использую PicoContainer для подключения классов моего приложения. Как вы можете видеть ниже, все идет отлично, но в одном месте:
CharArrayReader reader = new CharArrayReader(acCode.toCharArray());
CharStream charStream = new CharStream(reader);
Scanner scanner = new Scanner(charStream);
TokenStream tokenStream = new TokenStream(scanner);
ParserGeneratingAST parserGeneratingAST = new ParserGeneratingAST(tokenStream);
--> AbstractSyntaxTree ast = parserGeneratingAST.generateAST(); <-- here is the problem
SymbolsTable symbolsTable = new SymbolsTable();
ErrorsTable errorsTable = new ErrorsTable();
SymbolsTableFillerVisitor symbolsTableFillerVisitor = new SymbolsTableFillerVisitor(symbolsTable, errorsTable);
TypeCheckingVisitor typeCheckingVisitor = new TypeCheckingVisitor(symbolsTable, errorsTable);
InstructionsList instructionsList = new InstructionsList();
CodeGenerationVisitor codeGenerationVisitor = new CodeGenerationVisitor(instructionsList);
symbolsTableFillerVisitor.visit(ast);
typeCheckingVisitor.visit(ast);
codeGenerationVisitor.visit(ast);
Проблемная линия
AbstractSyntaxTree ast = parserGeneratingAST.generateAST();
Есть ли способ обойти эту проблему с помощью PicoContainer? Я хотел бы сохранить свои классы без аннотаций, если это возможно.
Спасибо
1 ответ
Решение
Если я правильно понимаю, ваша проблема в том, чтобы иметь AbstractSyntaxTree
вводится в вашем классе, но вы должны использовать ParserGeneratingAST
создать экземпляр AbstractSyntaxTree
, Хотя я не эксперт по PicoContainer, я думаю, что в этом случае вы можете использовать Фабрику, которая создает AbstractSyntaxTree
объекты (с помощью ParserGeneratingAST
), а затем вы можете использовать Factory Injection