我有一个关于静态方法访问的问题。我有一个类,我有 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
我知道我们可以在同一个类中从公共调用私有方法。所以我无法理解问题所在。
提前致谢。