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