Errai 中@Default 字段的模糊解析
Ambiguous resolution for field @Default in Errai
我有一个包含两个选项的菜单,根据我选择的选项,我的应用程序应该显示 RepoNavBar 或 UserNavBar。此 classes 是 NavBar 的子项。
我有一个 CommonPage,其中有所有项目中的一些公共组件,这个 class 有两个子 RepoCommonPage 和 UserCommonPage,其中声明了 RepoNavBar 和 UserNavBar。
CommonPage 像这样使用 class 类型的 ContentComponent:
public void setup(CommonPage<?> parentPage) {
...
}
当我尝试编译时,出现此错误:
Caused by: java.lang.RuntimeException: The following dependency problems were found:
[INFO] Ambiguous resolution for field @Default com.client.local.common.ContentComponent in Class @Any @Default com.client.local.usermgt.common.UserCommonPage.
有什么问题吗?
我是这样的:
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
。
此外,如果这还不够,也许您需要创建第三个中间体 class 来扩展每个用例的 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{
...
}
我有一个包含两个选项的菜单,根据我选择的选项,我的应用程序应该显示 RepoNavBar 或 UserNavBar。此 classes 是 NavBar 的子项。
我有一个 CommonPage,其中有所有项目中的一些公共组件,这个 class 有两个子 RepoCommonPage 和 UserCommonPage,其中声明了 RepoNavBar 和 UserNavBar。
CommonPage 像这样使用 class 类型的 ContentComponent:
public void setup(CommonPage<?> parentPage) {
...
}
当我尝试编译时,出现此错误:
Caused by: java.lang.RuntimeException: The following dependency problems were found: [INFO] Ambiguous resolution for field @Default com.client.local.common.ContentComponent in Class @Any @Default com.client.local.usermgt.common.UserCommonPage.
有什么问题吗?
我是这样的:
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
。
此外,如果这还不够,也许您需要创建第三个中间体 class 来扩展每个用例的 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{
...
}