【问题标题】:private static method access from public static从公共静态访问私有静态方法
【发布时间】:2013-10-25 07:17:39
【问题描述】:

我有一个关于静态方法访问的问题。我有一个类,我有 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 错误

我知道我们可以在同一个类中从公共调用私有方法。所以我无法理解问题所在。

提前致谢。

【问题讨论】:

  • 您确定在 ZKUtil 中使用的是从 org/zkoss/zul/Listbox 导入的列表框?
  • 是的,朱利安,我确信事实上我已经在您发表评论后确认了这一点。

标签: java


【解决方案1】:

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

【讨论】:

  • 是的..!!你正确的 chrylis 加载类问题。它在清洁和重建后正常工作。谢谢。
猜你喜欢
  • 1970-01-01
  • 2011-05-23
  • 2023-03-30
  • 1970-01-01
  • 2021-11-13
  • 2013-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多