Java找不到公共静态方法

我正在开发一个程序,其中创建了两个列表,并且必须对它们进行比较以查找是否有两个相同的 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 的新手,如果有人发现问题,他们能否指出它发生的原因?


叮当猫咪
浏览 214回答 2
2回答

慕村9548890

静态方法“属于”它们所编写的类。这里:&nbsp;findDuplicate(l1,&nbsp;l2)尝试在 Test 类中调用(静态)方法!因为它是一个不合格的调用,所以编译器会在发生调用的类(即Test)内部查找。findDuplicate()但是Test类中没有方法!相反,它来自 Duplicate 类,因此您需要:Duplicate.findDuplicate(l1,&nbsp;l2)(或者,您可以对该方法进行静态导入,但对于新手学习的东西,我建议避免这样做)当然,该方法也必须对您的 Test 类可见。因此,要么这两个类应该在同一个包中,要么正如各种评论中提到的那样,该方法需要public修饰符。

蝴蝶不菲

如果没有任何修饰符,您的方法将只能被它自己的类、子类和包访问。为了使您的测试可以访问它,您可以将其公开,但习惯上测试类通过添加与他们测试的类共享相同的包package&nbsp;reverse.domain.name.app;在你的班级和你的测试班之上。其次,您的方法是静态的,这意味着它与类相关联,而不是与它的实例相关联。这意味着你应该通过它的类名来引用它:Duplicate.findDuplicate()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java