静的メソッドへのアクセスについて質問があります。私は4つの静的メソッドを持っています。コードに示すように:
package com.itrucking.util;
public class ZKUtil implements Serializable {
private static final long serialVersionUID = 1L;
/**
*
* @author Shekhar
* @param _class
* @param listbox
* To make Listbox sorting enabled
* @throws NoSuchMethodException
* @throws SecurityException
*/
public static void setSortingEnabled(Class<?> _class, Listbox listbox){
Map<Listheader, String> sortingPair = new HashMap<Listheader, String>();
sortingPair = getMapForSorting(_class, listbox);
if (!sortingPair.isEmpty()) {
for (Map.Entry<Listheader, String> entry : sortingPair.entrySet()) {
entry.getKey().setSortAscending(
new FieldComparator(entry.getValue(), true));
entry.getKey().setSortDescending(
new FieldComparator(entry.getValue(), false));
}
}
}
/**
* @author Shekhar
* @param _class
* @param listbox
* @return Map<Listheader, String>
*/
private static Map<Listheader, String> getMapForSorting(Class<?> _class,Listbox listbox) {
List<Listheader> headerList = getListHeaderList(listbox);
Map<Listheader, String> sortingPair = new HashMap<Listheader, String>();
System.out.println(_class);
Field[] fields = _class.getDeclaredFields();
for (Field f : fields) {
// System.out.println(f.getName()+":"+f.getType());
for (Listheader lh : headerList) {
if (f.getName().equals(getId(lh)))
sortingPair.put(lh, f.getName());
}
}
System.out.println(sortingPair);
return sortingPair;
}
private static String getId(Listheader listheader) {
String listheaderId = null;
if (listheader.getId().contains("_")) {
listheaderId = listheader.getId().split("_")[1];
// System.out.println("listheaderId->"+listheaderId);
}
return listheaderId;
}
/**
* @author Shekhar
* @param listbox
* @return List<Listheader>
*/
@SuppressWarnings("unchecked")
private static List<Listheader> getListHeaderList(Listbox listbox) {
List<Listheader> headerList = new ArrayList<Listheader>();
Listhead listhead = null;
List<Component> listboxComponentList = listbox.getChildren();
for (Component listboxComponent : listboxComponentList) {
if (listboxComponent instanceof Listhead) {
listhead = (Listhead) listboxComponent;
break;
}
}
List<Component> listOfComp = listhead.getChildren();
if (listhead != null) {
for (Component c : listOfComp) {
if (c instanceof Listheader)
headerList.add((Listheader) c);
}
}
return headerList;
}
}
そして、私は以下のコードから onLoadShipperDetailsListCtrl() から setSortingEnabled() メソッドを呼び出しています:
package com.itrucking.webui.controller;
public class ShipperDetailsListCtrl{
/**
* @param e
* @return void
*/
public void onCreate$window_shipperDetailsList(Event e){
onLoadShipperDetailsListCtrl();
}
/**
* @return void
*/
public void onLoadShipperDetailsListCtrl(){
System.out.println("onLoadShipperDetailsListCtrl called.");
shipperList = shipperService.getShipperList();
doRenderListboxShipperDetailsList(shipperList);
ZKUtil.setSortingEnabled(ShipperMaster.class, listbox_shipperDetailsList);
}
}
だから私が他のクラスから setSortingEnabled() メソッドを呼び出していると思うので、私が保持していたのはパブリックであり、他のメソッドはプライベートとして保持していましたが、次のようなエラーが発生しています: java.lang.NoSuchMethodError: com/itrucking/util/ZKUtil.getMapForSorting (Ljava/lang/Class;Lorg/zkoss/zul/Listbox;)Ljava/util/Map;
setSortingEnabled() の ZKUtil.getMapForSorting() 呼び出しでエラー NoSuchMethodError が発生する理由
同じクラスで public から private メソッドを呼び出せることはわかっています。だから私は何が問題なのか理解できません。
前もって感謝します。