1

私はSwingクラスを持っています:

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

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

2つの「新しい」ステートメントを削除できるように、Guiceを使用するように変更する必要があります。私は次のようなものが欲しいです:

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

私の質問は、loginMenuItemを作成するときに文字列 "Login"を渡し、logoutMenuItemを作成するときに文字列 "Logout"を渡すことができるように、Guiceでバインディングを構成するにはどうすればよいですか?

どうもありがとう

4

1 に答える 1

1

@Namedそのために注釈を使用できます。

あなたのクラスでは:

@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"));
于 2013-02-06T20:50:20.733 に答える