Shekhar Khairnar
Shekhar Khairnar

Reputation: 2691

private static method access from public static

I have a question regarding static method access. I have a class within i have 4 static method. as shown in code:

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;
}

}

and i am calling setSortingEnabled() method from onLoadShipperDetailsListCtrl() from code bellow :

 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);
}

}

so what i think if i am calling setSortingEnabled() method from other class so i kept is as public and other method's i kept as private but it's giving me error as : java.lang.NoSuchMethodError: com/itrucking/util/ZKUtil.getMapForSorting(Ljava/lang/Class;Lorg/zkoss/zul/Listbox;)Ljava/util/Map;

Why there is error NoSuchMethodError for ZKUtil.getMapForSorting() call in setSortingEnabled()

I know we can call private method from public in the same class. So i am not able to understand what is the problem.

Thanks in advance.

Upvotes: 0

Views: 193

Answers (1)

A NoSuchMethodError (the runtime error saying a method can't be found, instead of a compiler error) usually means that the .class files you're using are of a different version than the files you compiled against. In this case, you probably made changes to ZKUtil.java, but the JVM is loading an outdated version of ZKUtil.class. Clean and rebuild all of your .class files.

Upvotes: 5

Related Questions