错误:* *在*类中不公开;从外部包中无法访问错误

时间:2015-06-16 14:35:55

标签: java jar package

我有一个名为Ullman的jar库。这个jar包含一个名为ullman的类。我尝试从该类访问一个void,当我运行程序时,它正在工作,但当我尝试 Clean and Build 时,我收到以下错误:

error: match(ArrayList<int[][]>,int[][],ArrayList<ArrayList<String>>,ArrayList<String>,ArrayList<Integer>) is not public in Ullman; cannot be accessed from outside package
    u.match(matrixgraph, matrixq, nodegraph, nodequery, nocandidategraph);

这是我导入该类的代码:

import ullman.Ullman;
public class Gui extends javax.swing.JFrame {
   int max_frag;
   int ratio;
   public Ullman u=new Ullman();
........

然后当我尝试从此GUI类访问void时出现错误 调用void

时的示例代码
u=new Ullman();
u.match(matrixgraph, matrixq, nodegraph, nodequery, nocandidategraph);

我该如何解决?

以下是match类中的ullman方法:

public void match(ArrayList<int[][]> matrixgraph, int[][] matrixquery, ArrayList<ArrayList<String>> nodegraph, ArrayList<String> nodequery, ArrayList<Integer> nocandidate) {
    answer.clear();
    matrixq=matrixquery;
    for (int i = 0; i < matrixgraph.size(); i++) {
        int [][]matrixsmile=matrixgraph.get(i);
        matrixg=new int[matrixsmile.length-1][matrixsmile.length-1];
        for(int x=0;x<matrixg.length;x++){
            for(int y=0;y<matrixg.length;y++){
                matrixg[x][y]=matrixsmile[x][y];
            }
        }
        matrix_query_graph = new int[matrixq.length][matrixg[0].length];
        for (int j = 0; j < matrix_query_graph.length; j++) {
            for (int k = 0; k < matrix_query_graph[0].length; k++) {
                matrix_query_graph[j][k] = 0;
            }
        }

        // adjacency matrix M
        ArrayList<String>nodeq = nodequery;
        ArrayList<String>nodeg = nodegraph.get(i);
        for(int m=0;m<nodeq.size();m++){
            for(int n=0;n<nodeg.size();n++){
                if (nodeq.get(m).equals(nodeg.get(n))) {
                    matrix_query_graph[m][n] = 1;
                }
            }
        }
        if (subgraphMatching(matrixq, matrixg, matrix_query_graph)) {
            answer.add(nocandidate.get(i));
        }
    }
}

2 个答案:

答案 0 :(得分:0)

您的错误是说您尝试访问的方法在导入的类中不公开。

error: match(ArrayList<int[][]>,int[][],ArrayList<ArrayList<String>>,ArrayList<String>,ArrayList<Integer>) is not public in Ullman; cannot be accessed from outside package
    u.match(matrixgraph, matrixq, nodegraph, nodequery, nocandidategraph);

错误清楚地表明该方法无法在Ullman包之外访问

因此,请将match()包中的Ullman方法公开,然后您就可以访问它了。

答案 1 :(得分:0)

您看到的输出显示Ullman.match()private,您无法直接从示例代码访问它。具体来说,match()方法是包私有,这意味着它只能由Ullman 的子类通过其他类来调用封装

如果您有权访问Ullman课程,请尝试公开match()。如果您有权访问源代码并且必须直接访问此方法,那么您可以尝试继承Ullman,然后添加帮助方法这样调用Ullman.match()

public class NewUllman extends Ullman {
    public void callMatch(ArrayList<int[][]> p1,int[][] p2, ArrayList<ArrayList<String>> p3, ArrayList<String> p4, ArrayList<Integer> p5) {
        match(p1, p2, p3, p4, p5);
    }
}