【问题标题】:Wicket 8 wicket setDefaultModel clashes with setDefaultModelWicket 8 wicket setDefaultModel 与 setDefaultModel 冲突
【发布时间】:2018-08-20 13:10:01
【问题描述】:

从 Wicket 7 升级到 Wicket 8 后,我在 IntelliJ 中遇到了多个擦除警告。

例如使用AjaxLinkIntelliJ 时抱怨

'setDefaultModel(IModel 模型)' in 'org.apache.wicket.MarkupContainer' 与 'setDefaultModel(IModel 模型)' 在 'org.apache.wicket.IGenericComponent';两种方法都有相同的擦除 但两者都不会覆盖另一个

我能做些什么吗?

【问题讨论】:

  • 您使用哪个版本的 IDEA?有趣的是,为什么到目前为止还没有其他人注意到这一点。由于 javac 对此感到高兴,所以这不是一个真正的问题。也许 IDEA 是罪魁祸首
  • @martin-g 似乎是泛型相关的,而不是 IDEA 相关的

标签: java wicket wicket-8


【解决方案1】:

当你没有给AjaxLink 一个泛型类型时会发生这个错误。例如:

new AjaxLink("id")

而不是类似的东西:

new AjaxLink<Void>("id")

AjaxLink 有如下定义:

public abstract class AjaxLink<T> extends AbstractLink implements IAjaxLink, IGenericComponent<T, AjaxLink<T>>

祖先类是MarkupContainer,它定义了:

public MarkupContainer setDefaultModel(final IModel<?> model)

它实现了IGenericComponent,它具有泛型类型&lt;T, C extends IGenericComponent&lt;? super T, ?&gt;&gt;,它们被分配了类型&lt;T,AjaxLink&lt;T&gt;&gt;并定义了方法:

Component setDefaultModel(IModel<?> model);

现在,我不完全确定我是否完全理解了这个问题,但不知何故,由于缺乏泛型类型,编译器无法确定来自 MarkupContainer(返回 MarkupContainer)的实现与IGenericComponent中定义的方法。

【讨论】:

  • 你是绝对正确的。这解决了它,但为什么它只发生在 Wicket 8 中?
  • IGenericComponent 没有在 Wicket 7 中定义 setDefaultModel
  • 这句开头的句子有问题“当你没有给AjaxLink一个泛型类型时会发生这个错误。当你这样做时会发生错误:”其中一个必须是否定的,它们都是表示无论是否提供 T 都会发生错误。
  • 代码示例应该是第二句的一部分,在这种情况下,它们都描述了相同的情况,但我将编辑答案以澄清
猜你喜欢
  • 1970-01-01
  • 2012-12-23
  • 2018-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-09
  • 1970-01-01
相关资源
最近更新 更多