2013-10-25 3 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

yes Julien Я уверен, что на самом деле я подтвердил это после вашего комментария. –

ответ

5

A NoSuchMethodError (ошибка выполнения, указывающая, что метод не может быть найден, а не ошибка компилятора) обычно означает, что файлы .class, которые вы используете, имеют другую версию, чем файлы, скомпилированные против. В этом случае вы, вероятно, внесли изменения в ZKUtil.java, но JVM загружает устаревшую версию ZKUtil.class. Очистите и перестройте все свои файлы .class.

+1

да .. !! ваша правая проблема chrylis с классом нагрузки. Его правильная работа после очистки и восстановления. спасибо. –

Смежные вопросы