次のようなコンパイル エラーが発生します: The method visitParents(Class<C>)
in some type is not applied for the arguments(Class<MyClass>)
MyClass は次のようなものです。 public class SortableTable<T>{...}
<C>
他の多くのクラスが悪影響を受けるため、SortableTableの型パラメーターを に変更しないことを好みClass<C>
ます。
潜在的な解決策は高く評価されます。
アドバイスありがとうございます。ページをコードで埋めずに、できる限り具体的にしようと思います。
「visitParents(SortableTable.class, visitor);」行のエラーの説明:
Component 型のメソッド visitParents(Class"<"C">", IVisitor"<"C,R">") は、引数 (Class"<"SortableTable">", IVisitor"<"Component,無効">")
public class SelectAllFilterPanel extends Panel{private static final Logger log = Logger.getLogger(CorporateActionsPanel.class);
private static final long serialVersionUID = 1L;
public SelectAllFilterPanel(String id, final IModel<Boolean> model){
super(id);
add(new AjaxCheckBox("selectAll", model){
private static final long serialVersionUID = 1L;
@Override
protected void onUpdate(AjaxRequestTarget target) {
// TODO - do this properly
final AjaxRequestTarget requestTarget = target;
IVisitor<Component, Void> visitor = new IVisitor<Component, Void>(){
@Override
public void component(Component component, IVisit visit) {
SortableTable<?> table = (SortableTable<?>)component;
table.visitChildren(CheckBox.class, new IVisitor<Component, Void>(){
@Override
public void component(Component component, IVisit visit) {
if (!component.getId().equals("selectAll")){
CheckBox checkbox = (CheckBox)component;
if (model.getObject())
checkbox.setModelObject(true);
else
checkbox.setModelObject(false);
requestTarget.add(checkbox);
}
}
});
visit.stop();
}
};
visitParents(SortableTable.class, visitor);
target.add(this);
}
});
}}
SortableTable クラス:
public class SortableTable<T> extends DataTable<T, String> { private HeadersToolbar headerToolbar;
@SuppressWarnings("unchecked")
public SortableTable(String tableId, SortableTableDataProvider<T> dataProvider, int maxRows) {
this(tableId, dataProvider.getColumns(), dataProvider, maxRows);
}
@SuppressWarnings("unchecked")
public SortableTable(String tableId, List<IColumnConfig<T, String>> columns, ISortableDataProvider<T, String> dataProvider, int maxRows) {
super(tableId, new java.util.LinkedList<IColumn<T, String>>(columns), dataProvider, maxRows);
addTopToolbar(new NavigationToolbar(this));
addTopToolbar(headerToolbar = new HeadersToolbar(this, dataProvider));
addBottomToolbar(new NoRecordsToolbar(this));
setItemReuseStrategy(ReuseIfModelsEqualStrategy.getInstance());
}
public void setHeaderVisible(boolean visible) {
headerToolbar.setVisibilityAllowed(visible);
}
public boolean isHeaderVisible() {
return headerToolbar.isVisibilityAllowed();
}
@Override
protected Item<T> newRowItem(String id, int index, IModel<T> model)
{
return new OddEvenItem<T>(id, index, model);
}}
visitParent の署名は次のとおりです。
public final <R, C extends MarkupContainer> R visitParents(final Class<C> parentClass,
final IVisitor<C, R> visitor)
{
return visitParents(parentClass, visitor, new AllVisitFilter());
}