我有一个关于静态方法访问的问题。我有一个类我有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的私有方法。所以我无法理解这是什么问题。
提前致谢。
答案 0 :(得分:5)
NoSuchMethodError
(运行时错误说无法找到方法,而不是编译器错误)通常意味着您使用的.class
文件版本与文件版本不同你编译反对。在这种情况下,您可能对ZKUtil.java
进行了更改,但JVM正在加载过时的ZKUtil.class
版本。清理并重建所有.class
个文件。