我正在开发一个程序,其中创建了两个列表,必须对它们进行比较以查找是否有两个相同的 RECURS。我正在测试它是否有效(并且必须使用这些方法),但我仍然遇到同样的问题;找不到标志。
public class Duplicate {
public Duplicate(){};
static ArrayList<Recurs> findDuplicate(ArrayList<Recurs> l1, ArrayList<Recurs> l2){
ArrayList<Recurs> l3 = new ArrayList<>();
for(int i=0; i<l1.size(); i++){
for(int j=0; j<l2.size();j++){
if(l2.get(i).equals(l1.get(j))){
l3.add(l1.get(i));
}
}
}
return l3;
}
}
这段代码应该可以工作。顺便说一句,我编写了一个名为 Recurs 的类,据说它也可以工作(我做了另一个测试,在我创建的 equals 方法中工作正常)。
问题来了。
public class Test {
public static void main (String[] args){
Recurs o = new Recurs(3, "a");
Recurs e = new Recurs(2, "b");
Recurs m = new Recurs(4, "a");
Recurs n = new Recurs(2, "b");
ArrayList<Recurs> l1= new ArrayList<>();
l1.add(o);
l1.add(e);
ArrayList<Recurs> l2= new ArrayList<>();
l2.add(m);
l2.add(n);
ArrayList<Recurs> l3 = new ArrayList<>(findDuplicate(l1, l2))
}
}
我创建了一个测试,它应该向我显示这部分正在工作,但我在最后一行代码遇到问题,因为它告诉我它找不到 findDuplicate。
我是Java新手,如果有人发现问题,能否指出发生这种情况的原因?
最佳答案
静态方法“属于”它们编写的类。
这里:
findDuplicate(l1, l2)
尝试调用 Test 类中的(静态)方法!因为它是一个不合格调用,所以编译器将查看发生调用的类(即 Test)。但是Test类中没有findDuplicate()
方法!
相反,它来自 Duplicate 类,因此您需要:
Duplicate.findDuplicate(l1, l2)
(或者,您可以执行该方法的static import,但对于新手学习东西,我建议避免这样做)
当然,该方法也必须对您的测试类可见。因此,要么这两个类应该位于同一个包中,要么如各种注释中提到的,该方法需要 public 修饰符。
关于Java找不到公共(public)静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55715850/