gpt4 book ai didi

java - 如何在 Guice 中传递构造函数参数

转载 作者:太空宇宙 更新时间:2023-11-04 07:49:23 25 4
gpt4 key购买 nike

我有一个 Swing 类:

public class PopUpContextMenu extends JPopupMenu {
public PopUpContextMenu() {
super();

JMenuItem loginMenuItem = new LoginMenuItem("Login");
JMenuItem logoutMenuItem = new LogoutMenuItem("Logout");
add(loginMenuItem);
add(logoutMenuItem);
}
}

我想将其更改为使用Guice,以便可以删除两个"new"语句。我想要这样的东西:

public class PopUpContextMenu extends JPopupMenu {
@Inject
public PopUpContextMenu(JMenuItem loginMenuItem, JMenuItem logoutMenuItem) {
super();
add(loginMenuItem);
add(logoutMenuItem);
}
}

我的问题是如何在 Guice 中配置绑定(bind),以便在构造 loginMenuItem 时传递字符串“Login”并在构造 logoutMenuItem 时传递字符串“Logout”?

非常感谢

最佳答案

您可以使用@Named注释来实现:

在你的类(class):

@Inject
@Named("LOGIN")
JMenuItem loginMenuItem;

@Inject
@Named("LOGOUT")
JMenuItem logoutMenuItem

那么在你的 Guice 模块中的 configure() 方法中你可以这样做:

bind(JMenuItem.class).annotatedWith(Names.named("LOGIN")).toInstance(new LoginMenuItem("Login"));
bind(JMenuItem.class).annotatedWith(Names.named("LOGOUT")).toInstance(new LoginMenuItem("Logout"));

关于java - 如何在 Guice 中传递构造函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14738312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com