我有一个名为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));
}
}
}
答案 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);
}
}