簡體   English   中英

Java找不到公共靜態方法

[英]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的類,該類也應該可以工作(我做了另一個測試,在創建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)

(或者,您可以對該方法進行靜態導入 ,但是對於新手學習的東西,我建議避免這樣做)

當然,該方法也必須對您的Test類可見。 因此,這兩個類應該位於同一包中,或者如各種注釋中所述,該方法需要public修飾符。

沒有任何修飾符,您的方法將只能由其自己的類,子類和包訪問。 為了使您的測試可以訪問它,可以將其公開,但是習慣上,測試類與以下類共享與他們測試的類相同的包:

package reverse.domain.name.app;

高於您的課程和測試課程。

其次,您的方法是靜態的,這意味着它與類關聯,而不是其實例。 這意味着您應該通過其類名來引用它:

Duplicate.findDuplicate()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM