2013-10-25 191 views
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; 
} 

}

,我從代碼中調用setSortingEnabled()從onLoadShipperDetailsListCtrl(方法)波紋管:

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;

爲什麼有錯誤的NoSuchMethodError爲ZKUtil.getMapForSorting(在setSortingEnabled)()調用

我知道我們可以在同一個類調用私有方法從公衆。所以我無法理解這是什麼問題。

在此先感謝。

+0

您確定在ZKUtil中使用從org/zkoss/zul/Listbox導入的列表框? – Julien

+0

是的朱利安我確定其實我確認你的評論後。 –

回答

5

A NoSuchMethodError(運行時錯誤指出找不到方法,而不是編譯器錯誤)通常意味着您使用的文件與您編譯的文件版本不同。在這種情況下,您可能對ZKUtil.java進行了更改,但JVM正在加載ZKUtil.class的過期版本。清理並重建所有.class文件。

+1

是啊.. !!加載類的正確chrylis問題。它在清潔和重建後正常工作。 謝謝。 –