取消选中返回类类型时的转换



我有一个返回类类型的方法,它运行正常
问题是……我收到一些编译警告,表示未检查转换。

下面是我收到的警告信息:

Warning: java: getAjaxEventPayloadClass() in <anonymous com.iyotbihagay.wicket.panel.requestpage.resultlist.ResultList2$7> implements <P>getAjaxEventPayloadClass() in com.iyotbihagay.wicket.panel.paging.Paging.Support
return type requires unchecked conversion from java.lang.Class<com.iyotbihagay.wicket.support.RefreshSearchResultEventPayload> to java.lang.Class<P>

即使我使用CCD_ 1,我仍然无法摆脱编译警告。

以下是一些指向警告的代码:

ResultList2.java

public class ResultList2 {
...
private Component createPaging() {
return new Paging("paging", getRequestPageContext(), new Paging.Support() {
@Override
public void switchPage(AjaxRequestTarget target, int targetPageNum) {
getRequestPageContext().switchPage(target, targetPageNum);
}
@Override
public int getTotalNum() {
return getSearchResult().getTotalNum();
}
@Override
public int getPageSize() {
return getSearchResult().getPageSize();
}
@Override
public int getLastPageNum() {
return getSearchResult().getLastPageNum();
}
@Override
public int getCurrentPageNum() {
return getSearchResult().getCurrentPageNum();
}
@SuppressWarnings("unchecked")
@Override
public Class<RefreshSearchResultEventPayload> getAjaxEventPayloadClass() {
return RefreshSearchResultEventPayload.class;
}
@Override
public void decorateAjaxAttributes(AjaxRequestAttributes attributes, String pageNumMarkupId) {
decorateAjaxRefreshSearchResult(attributes, pageNumMarkupId);
}
});
}
...
}

支持.java

public static interface Support extends Serializable {
...
<P extends AjaxEventPayload> Class<P> getAjaxEventPayloadClass();
...
}

分页.java

public class Paging {
...
private Support m_support;
...
@Override
public void onEvent(IEvent<?> event) {
super.onEvent(event);
WicketUtil.onEvent(event, m_support.getAjaxEventPayloadClass(), new AjaxEventHandler<AjaxEventPayload>() {
@Override
public void onEvent(IEvent<?> event, AjaxRequestTarget target, AjaxEventPayload paymentLoad) {
m_firstPageNumModel.detach();
m_previousPageNumModel.detach();
m_nextPageNumModel.detach();
m_lastPageNumModel.detach();
target.add(m_container);
}
});
}
...
}

WicketUtil.java

public class WicketUtil {
...
public static <P extends AjaxEventPayload> void onEvent(IEvent<?> event, Class<P> targetPayload, AjaxEventHandler<P> handler) {
if (event.getPayload() != null) {
if (targetPayload.isAssignableFrom(event.getPayload().getClass())) {
P p = (AjaxEventPayload)event.getPayload();
handler.onEvent(event, p.getTarget(), p);
}
}
}
...
}

WicketUtil.onEvent()上调用/传递m_support.getAjaxEventPayloadClass()。。。特别是关于第二参数
RefreshSearchResultEventPayload只是扩展AjaxEventPayload的类之一,还有其他扩展到AjaxEventPayload并传递到WicketUtil.onEvent()的类。

这应该是:

public static interface Support extends Serializable {
...
Class<? extends AjaxEventPayload> getAjaxEventPayloadClass();
...
}

public class ResultList2 {
...
@Override
public Class<RefreshSearchResultEventPayload> getAjaxEventPayloadClass() {
return RefreshSearchResultEventPayload.class;
}
...
}

原因是<P extends AjaxEventPayload>意味着该方法可以返回任意有效载荷类型的类(根据调用方的请求(,例如:

support.<AjaxEventPayload>getAjaxEventPayloadClass()

而不是仅返回特定于实现类的一种有效载荷类型(例如RefreshSearchResultEventPayload(。

最新更新