我有一个带有两个选项的菜单,并且根据我选择的选项,我的应用程序应显示RepoNavBar或UserNavBar。该类是NavBar的子级。

我有一个CommonPage,在所有项目中都有一些通用组件,该类有两个子RepoCommonPage和UserCommonPage,其中两个子声明为RepoNavBar和UserNavBar。

CommonPage使用类似ContentComponent类型的类,如下所示:

public void setup(CommonPage<?> parentPage) {
    ...
}

当我尝试编译时,出现以下错误:

原因:java.lang.RuntimeException:发现了以下依赖关系问题:
[INFO]类@Any @Default com.client.local.usermgt.common.UserCommonPage中的@Default com.client.local.common.ContentComponent字段的解析不明确。

有什么事吗

这是我的做法:
public abstract class NavBarComponent implements IsElement {

    @Templated(value = "navbar.html#navBtn")
    public static class NavBarItemComponent extends SimpleValueItemComponent<String> {...}
    ...
}
public class RepoNavBarComponent extends NavBarComponent {
     ...
}

public class UserNavBarComponent extends NavBarComponent {
     ...
}

public abstract class CommonPage<T extends ContentComponent> {
     ...
}

public class UserCommonPage<T extends ContentComponent> extends CommonPage<T>{
     ...
}

public class RepoCommonPage<T extends ContentComponent> extends CommonPage<T> {
     ...
}

ContentComponent是这样注入的:
public class UserCommonPage<T extends ContentComponent> extends CommonPage<T>{

    protected UserNavBarComponent userNavBar;

    public UserNavBarComponent getUserNavBar() {
        return userNavBar;
    }

    @PageShown
    public void preparePageShown() {
        log.debug("Page shown");
        userNavBar.refresh();
    }
}

最佳答案

我敢打赌UserCommonPage(以及其他像RepoCommonPage)应该是abstract

另外,如果这还不够,也许您需要创建第三个中间类,为每个用例扩展ContentComponent。例如:

 public abstract class UserCommonPage<T extends UserContentComponent> extends CommonPage<T>{

    @Inject
    protected UserNavBarComponent userNavBar;

    public UserNavBarComponent getUserNavBar() {
        return userNavBar;
    }

    @PageShown
    public void preparePageShown() {
        log.debug("Page shown");
        userNavBar.refresh();
    }
}

public class UserContentComponent extends ContentComponent{
   ...
}

10-06 06:25