我正在开发一个程序,其中创建了两个列表,并且必须对它们进行比较以查找是否有两个相同的 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 的新手,如果有人发现问题,他们能否指出它发生的原因?
2 回答
慕村9548890
TA贡献1884条经验 获得超4个赞
静态方法“属于”它们所编写的类。
这里:
findDuplicate(l1, l2)
尝试在 Test 类中调用(静态)方法!因为它是一个不合格的调用,所以编译器会在发生调用的类(即Test)内部查找。findDuplicate()但是Test类中没有方法!
相反,它来自 Duplicate 类,因此您需要:
Duplicate.findDuplicate(l1, l2)
(或者,您可以对该方法进行静态导入,但对于新手学习的东西,我建议避免这样做)
当然,该方法也必须对您的 Test 类可见。因此,要么这两个类应该在同一个包中,要么正如各种评论中提到的那样,该方法需要public修饰符。
蝴蝶不菲
TA贡献1810条经验 获得超4个赞
如果没有任何修饰符,您的方法将只能被它自己的类、子类和包访问。为了使您的测试可以访问它,您可以将其公开,但习惯上测试类通过添加与他们测试的类共享相同的包
package reverse.domain.name.app;
在你的班级和你的测试班之上。
其次,您的方法是静态的,这意味着它与类相关联,而不是与它的实例相关联。这意味着你应该通过它的类名来引用它:
Duplicate.findDuplicate()
添加回答
举报
0/150
提交
取消
