尽管有不同的构造函数@inject
我正在关注Dagger ATM教程在线,并在页面末尾遇到了问题: https://dagger.dev/tutorial/03-first-command
我已将所有代码丢弃了以下所有代码以易于参考,但实际上我了解的是命令和Commandrouter实例正在注入使用DaggerCommandRouterFactory,但是无论我做什么,都正在使用commandrouter的无参数构造函数 - 如果我遗漏了编译器,则不满意,所以我有两个构造函数,只注入了我需要的构造函数,但它仍在打电话给它没有参数构造函数!
我在线遇到了以下文章( https://youtrack.jetbrains.jetbrains.jjjetbrains.com/issue/idea--eisue/idea-------- 190622 ),这表明Intellij正在缓存以前的构建方面,我想这是注射No-参数构造函数的注释,但我对如何纠正它有些困扰。
import java.util.List;
public interface Command {
String key();
Status handleInput(List<String> input);
enum Status {
INVALID,
HANDLED
}
}
import javax.inject.Inject;
import java.util.List;
public final class HelloWorldCommand implements Command {
@Inject
HelloWorldCommand(){};
@Override
public String key() {
return "hello";
}
@Override
public Status handleInput(List<String> input) {
System.out.println(input.size());
if (!input.isEmpty())
return Status.INVALID;
System.out.println("world!");
return Status.HANDLED;
}
}
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import ATM.Command.Status;
import javax.inject.Inject;
public class CommandRouter {
private final Map<String, Command> commands = new HashMap<>();
@Inject
CommandRouter(HelloWorldCommand helloWorldCommand){
System.out.println("HelloWorldCommand Constructor");
commands.put(helloWorldCommand.key(), helloWorldCommand);
}
CommandRouter(){
System.out.println("No Parameter Constructor");
}
Status route(String input) {
List<String> splitInput = split(input);
if (splitInput.isEmpty()) {
return invalidCommand(input);
}
String commandKey = splitInput.get(0);
Command command = commands.get(commandKey);
if (command == null) {
return invalidCommand(input);
}
Status status = command.handleInput(splitInput.subList(1, splitInput.size()));
if (status == Status.INVALID){
System.out.println(commandKey + ": invalid arguments");
}
return status;
}
private Status invalidCommand(String input) {
System.out.println(String.format("couldn't understand \"%s\". please try again.", input));
return Status.INVALID;
}
private List<String> split(String input) {
List<String> tokens = List.of(input.split(" "));
return tokens;
}
}
import dagger.Component;
@Component
public interface CommandRouterFactory {
CommandRouter router();
}
import java.util.Scanner;
public class CommandLineATM {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
CommandRouterFactory commandRouterFactory = DaggerCommandRouterFactory.create();
CommandRouter commandRouter = commandRouterFactory.router();
while(scanner.hasNextLine()){
commandRouter.route(scanner.nextLine());
}
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论