Java 勘误表中字段@Default的解析不明确

Java 勘误表中字段@Default的解析不明确,java,cdi,errai,Java,Cdi,Errai,我有一个包含两个选项的菜单,根据我选择的选项,我的应用程序应该显示RepoNavBar或UserNavBar。这些课程是NavBar的孩子 我有一个CommonPage,其中所有项目中都有一些公共组件,这个类有两个子类RepoCommonPage和UserCommonPage,其中声明了RepoNavBar和UserNavBar CommonPage使用ContentComponent类型的类,如下所示: public void setup(CommonPage<?> parentP

我有一个包含两个选项的菜单,根据我选择的选项,我的应用程序应该显示RepoNavBar或UserNavBar。这些课程是NavBar的孩子

我有一个CommonPage,其中所有项目中都有一些公共组件,这个类有两个子类RepoCommonPage和UserCommonPage,其中声明了RepoNavBar和UserNavBar

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

public void setup(CommonPage<?> parentPage) { 
    ...
}
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();
    }
}
公共无效设置(CommonPage父页面){
...
}
当我尝试编译时,出现以下错误:

原因: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> { 
     ...
}
公共抽象类NavBarComponent实现IsElement{
@模板化(value=“navbar.html#navBtn”)
公共静态类NavBarItemComponent扩展了SimpleValueItemComponent{…}
...
}
公共类RepoNavBarComponent扩展了NavBarComponent{
...
}
公共类UserNavBarComponent扩展了NavBarComponent{
...
}
公共抽象类CommonPage{
...
}
公共类UserCommonPage扩展了CommonPage{
...
}
公共类RepoCommonPage扩展了CommonPage{
...
}
ContentComponent的注入方式如下:

public void setup(CommonPage<?> parentPage) { 
    ...
}
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();
    }
}
public类UserCommonPage扩展了CommonPage{
受保护的userNavBar组件userNavBar;
公共UserNavBarComponent getUserNavBar(){
返回用户导航栏;
}
@页面显示
公开作废准备公告(){
log.debug(“显示的页面”);
userNavBar.refresh();
}
}

我打赌
UserCommonPage
(以及其他类似
repocomonpage
)应该是
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{
   ...
}

公共抽象类UserCommonPage扩展了CommonPage{
@注入
受保护的userNavBar组件userNavBar;
公共UserNavBarComponent getUserNavBar(){
返回用户导航栏;
}
@页面显示
公开作废准备公告(){
log.debug(“显示的页面”);
userNavBar.refresh();
}
}
公共类UserContentComponent扩展了ContentComponent{
...
}

UserCommonPage
中如何注入
ContentComponent
?它就像:
公共类UserCommonPage扩展了CommonPage{protected UserNavBarComponent userNavBar;public UserNavBarComponent getUserNavBar(){return userNavBar;}@PageShowed public void PrepareShown(){log.debug(“显示的页面”);userNavBar.refresh();}}
但我指的是
UserCommonPage