Java找不到公共静态方法

时间:2019-04-16 20:04:55

标签: java static-methods

我正在一个程序中创建两个列表,并且必须将它们进行比较以找到是否有两个相同的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 个答案:

答案 0 :(得分:2)

静态方法“属于”它们写入的类。

这里:

 findDuplicate(l1, l2)

尝试在Test类中调用一个(静态)方法!因为这是一个不合格调用,所以编译器将在调用发生的类(即Test)的内部进行查看。但是Test类中没有findDuplicate()方法!

相反,它来自Duplicate类,因此您需要:

Duplicate.findDuplicate(l1, l2)

(或者,您可以使用该方法的static import,但是对于新手学习的东西,我建议避免这样做)

当然,该方法也必须对您的Test类可见。因此,这两个类应该在同一个包中,或者如各种注释中所述,该方法需要 public 修饰符。

答案 1 :(得分:2)

没有任何修饰符,您的方法将只能由其自己的类,子类和包访问。为了使您的测试可以访问它,您可以将其公开,但是习惯上,测试类与他们添加的测试类共享相同的包

package reverse.domain.name.app;

在您的课程和测试课程之上。

第二,您的方法是静态的,这意味着它与类关联,而不是其实例。这意味着您应该使用其类名来引用它:

Duplicate.findDuplicate()