2014-10-01 36 views
1

新手在這裏工作的一個程序,其中許多方法在一定程度上以相同的方式重複,我不知道如果我可以做一個方法,這種模式與不同方法的參數?如何製作一種以某種方式重複參數方法的java方法?

所以基本上爲簡單起見,讓我們說一些方法需要重複X次,我需要這樣的事情,除了這不起作用:

public static void repeatThis(void method, int times){ 
     for (int i = 0, i < times, i++){ 
      method; 
     } 
    } 

Which'd是重複輸入方法的方法正好次數。但是這不起作用。那麼我該如何做這樣的事情,而參數是指第一種方法應該處理的方法?

+0

我個人只是不停的循環。它們短而透明。將這些調用分解爲一個函數可能適用於最簡單的情況,但只要您需要將不同的參數傳遞給不同的調用,或者查看返回值等,它會變得非常多毛。 – NPE 2014-10-01 18:04:16

+0

@NPE他不問如何獲得擺脫循環。他在問如何以編程方式傳遞一個方法。 – 2014-10-01 18:04:51

+0

@KevinWorkman:這不是我讀的意圖。 – NPE 2014-10-01 18:05:32

回答

3

所以你想通過「代碼」作爲參數的方法。在Java中執行此操作的方法是在調用方法時傳遞對象。如果您沒有對要運行的代碼有任何參數,也沒有對任何返回值感興趣,則可以使用Runnable接口來實現此目的。

所以,試試這個:

public static void repeatThis(Runnable runnable, int times) { 
    for (int i = 0; i < times; i++) { 
     runnable.run(); 
    } 
} 

repeatThis(new Runnable() { 
    public void run() { 
     System.out.println("Your action"); 
    } 
}, 10); 

調用的方法。如果你對Java的你可以使用lambda表達式,並表示,如下所示:

repeatThis(() -> System.out.println("Your action"), 10); 
+1

(+1)用於Java 8語法。真的那樣。 – NPE 2014-10-01 18:08:31

+1

然後我們有更多的共同點,比我們的用戶名;-) – aioobe 2014-10-01 18:15:37

1

你的方法參數應該是某種接口類型,並且該接口應該有一個方法,比如run()。然後你在循環中調用該方法。

例子:

public static void repeatThis(Runnable method, int times){ 
     for (int i = 0, i < times, i++){ 
      method.run(); 
     } 
    } 

這是假設你的方法沒有參數,並且沒有返回。如果不是這種情況,可以使用包含其他方法的不同接口,以及所需的參數和返回類型。

爲了調用repeatThis,做這樣的事情:

repeatThis (
    new Runnable() { 
    public void run() 
    { 
     //enter logic to be executed here 
    } 
    },100); 

在Java 8,你可以使用lambda表達式來代替這個匿名類的實例。

1

有幾種方法可以做到這一點。

您可以傳入包含該方法的Object,然後調用該Object上的方法。儘管如此,你必須提前對方法進行硬編碼。

或者你可以傳入一個包含一個函數(稱爲doFunction()或其他)的包裝器對象,該函數簡單地稱爲正確的函數。你必須創建對象並傳入你的repeat()函數。 (使用Runnable的其他答案正在採用這種方法)。

類似地,Java 8閉包在不使用具體類的情況下完成上述操作。

或者你可以使用反射。

0

您可以做的最基本的事情是爲該方法創建一個接口或使用現有的接口,如Runnable

public static void repeatThis(Runnable runnable, int times){ 
    for (int i = 0, i < times, i++){ 
     runnable.run(); 
    } 
} 

然後調用它:

// Prints "Hi!" 5 times 
repeatThis(new Runnable() { 
    @Override 
    public void run() { 
     System.out.println("Hi!"); 
    } 
}, 5); 
相關問題