为了账号安全,请及时绑定邮箱和手机立即绑定

Java找不到公共静态方法

Java找不到公共静态方法

叮当猫咪 2022-10-07 19:32:40
我正在开发一个程序,其中创建了两个列表,并且必须对它们进行比较以查找是否有两个相同的 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修饰符。


查看完整回答
反对 回复 2022-10-07
?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

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

package reverse.domain.name.app;

在你的班级和你的测试班之上。

其次,您的方法是静态的,这意味着它与类相关联,而不是与它的实例相关联。这意味着你应该通过它的类名来引用它:

Duplicate.findDuplicate()


查看完整回答
反对 回复 2022-10-07
  • 2 回答
  • 0 关注
  • 212 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号