0

我有一个关于静态方法访问的问题。我有一个类,我有 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

我知道我们可以在同一个类中从公共调用私有方法。所以我无法理解问题所在。

提前致谢。

4

1 回答 1

5

A NoSuchMethodError(运行时错误表示找不到方法,而不是编译器错误)通常意味着.class您使用的文件与您编译的文件的版本不同。在这种情况下,您可能对 进行了更改ZKUtil.java,但 JVM 正在加载ZKUtil.class. 清理并重建所有.class文件。

于 2013-10-25T07:19:41.367 回答