Java找不到公共(public)静态方法

标签 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新手,如果有人发现问题,能否指出发生这种情况的原因?

最佳答案

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

这里:

 findDuplicate(l1, l2)

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

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

Duplicate.findDuplicate(l1, l2)

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

当然,该方法也必须对您的测试类可见。因此,要么这两个类应该位于同一个包中,要么如各种注释中提到的,该方法需要 public 修饰符。

关于Java找不到公共(public)静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55715850/

相关文章:

java - 为 Heroku 应用程序的本地版本配置数据库访问

JavaFx 复制超链接

java - (数组)列表在 Java 中的实现

c++ - 静态方法/字段的继承 C++

objective-c - iPhone Cocos2D游戏编程教材中的循环引用

python - Django:如何在没有此类实例的情况下对另一个类进行反向外键查找?

Java - 定义用于创建对象的行,而不是仅使用方法

java - 如何将所有月份名称放入 HashMap 中并将一月替换为一月,二月替换为二月?

java - 在同一服务器上创建 IBM MQ 连接的最佳方法

python - 从类内部调用静态方法