私有静态方法从公共静态访问

时间:2013-10-25 07:17:39

标签: java

我有一个关于静态方法访问的问题。我有一个类我有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的私有方法。所以我无法理解这是什么问题。

提前致谢。

1 个答案:

答案 0 :(得分:5)

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