Java 找不到 public 静态方法
Java can't find public static method
我正在开发一个程序,其中创建了两个列表,必须比较它们以查找是否有两个相同的 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 的 class,据说它也可以工作(我做了另一个测试并且在我创建 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,如果有人发现问题,他们是否也能指出问题发生的原因?
静态方法"belong"到class它们是写在中的
这里:
findDuplicate(l1, l2)
尝试调用测试中的(静态)方法 class!因为它是一个 unqualified 调用,所以编译器会在调用发生的 class 内部查找(即 Test)。但是Testclass!
里面没有findDuplicate()
方法
相反,它来自重复 class,因此您需要:
Duplicate.findDuplicate(l1, l2)
(或者,您可以使用该方法 static import,但对于新手来说,我建议避免这样做)
当然,该方法也必须对您的测试可见 class。因此,要么这两个 classes 应该在同一个包中,要么如各种评论中所述,该方法需要 public 修饰符。
没有任何修饰符,您的方法将只能被它自己的 class、子classes 和包访问。为了让您的测试可以访问它,您可以将其设置为 public 但测试 classes 习惯于通过添加
与他们测试的 classes 共享相同的包]
package reverse.domain.name.app;
高于你的 class 和你的测试 class。
其次,您的方法是静态的,这意味着它关联到 class,而不是它的实例。这意味着您应该通过其 class 名称来引用它:
Duplicate.findDuplicate()
我正在开发一个程序,其中创建了两个列表,必须比较它们以查找是否有两个相同的 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 的 class,据说它也可以工作(我做了另一个测试并且在我创建 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,如果有人发现问题,他们是否也能指出问题发生的原因?
静态方法"belong"到class它们是写在中的
这里:
findDuplicate(l1, l2)
尝试调用测试中的(静态)方法 class!因为它是一个 unqualified 调用,所以编译器会在调用发生的 class 内部查找(即 Test)。但是Testclass!
里面没有findDuplicate()
方法
相反,它来自重复 class,因此您需要:
Duplicate.findDuplicate(l1, l2)
(或者,您可以使用该方法 static import,但对于新手来说,我建议避免这样做)
当然,该方法也必须对您的测试可见 class。因此,要么这两个 classes 应该在同一个包中,要么如各种评论中所述,该方法需要 public 修饰符。
没有任何修饰符,您的方法将只能被它自己的 class、子classes 和包访问。为了让您的测试可以访问它,您可以将其设置为 public 但测试 classes 习惯于通过添加
与他们测试的 classes 共享相同的包]package reverse.domain.name.app;
高于你的 class 和你的测试 class。
其次,您的方法是静态的,这意味着它关联到 class,而不是它的实例。这意味着您应该通过其 class 名称来引用它:
Duplicate.findDuplicate()