当前位置: 首页 > 知识库问答 >
问题:

从公共静态访问私有静态方法

常永怡
2023-03-14

我有一个关于静态方法访问的问题。我有一个类,其中有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()的setSortingEnable()方法:

 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;

为什么有错误NoSuchmetodError为ZKUtil.getMapForSorting()调用setSorting启用()

我知道我们可以在同一个类中从public调用private方法。所以我无法理解问题是什么。

提前感谢。

共有1个答案

漆雕深
2023-03-14

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

 类似资料:
  • 为什么会这样?我的意思是,访问私有变量。

  • 问题内容: 和之间有什么区别? 例如 : 要么 问题答案: 尽管您 确实 希望遵守约定,但在功能上没有什么区别(字节码将 完全相同 ),请访问JLS-8.3.1。场修饰符: __ 这将是奇怪的,看.. 我也建议您访问checkstyle。 编辑: 从同一页面链接到该部分: http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls

  • 问题内容: 首先,如果这是一个非常愚蠢的问题,请原谅我,我只是想学习这种语言的核心。我正在阅读《有效的Java》,并且第一章讨论了静态工厂方法与构造方法。他们的利弊。令我困惑的几件事是: 静态工厂方法返回的对象的类是非公共的 -究竟是什么意思? 与构造函数不同,每次调用静态工厂方法都不需要创建新对象 -这是怎么发生的?我仅调用工厂方法来获取新对象,是否将检查方法放入工厂方法中以检查对象是否已存在?

  • 问题内容: 此Java程序包含一个静态变量。但是我无法理解公共静态变量和私有静态变量之间的区别。 问题答案: 公共变量可在代码中的 任何 位置访问- 私有变量仅可在类本身内部访问。在这种情况下,您可以在类中使用它,所以很好。 请注意,静态变量是完全独立的问题-方法和类具有与变量相同的可访问性。 还有其他级别的访问权限- 和默认的“包”访问权限(无法明确指定)。有关更多详细信息,请参见Java语言规