2009-10-29 56 views
2

通常我實現我的Runnable如下(直接實現內部類):用參數構造函數實現的Java Inner-class direclty?

Runnable updateRunnable = new Runnable() { 

    public void run() { 
    } 
} 

有沒有在Java中的任何工作方式通過如下構造函數傳遞任何參數來實現類?

Runnable updateRunnable = new Runnable(locale) { 

    Locale locale = null; 

    public Runnable(Locale locale){ 
     this.locale = locale 
    } 

    public void run() { 
    } 
}; 

==>我的目標是有一個直接實現的內部類,但我想傳入一個參數。

最好的解決方案是做什麼(上面的例子似乎不工作????)是唯一的可能性與getter setter或作爲一個「普通」內部類實現類(這不是直接執行)。

非常感謝你! 揚

回答

5

你可以做同樣的事情:

final Locale locale; 
Runnable r = new Runnable() { 
    public void run() { 
     // have direct access to variable 'locale' 
    } 
}; 

需要注意的重要一點是,Locale你傳遞必須final爲了讓您能夠做到這一點。你需要初始化locale以便編譯。

+0

hello jjnguy,非常感謝您的幫助解決方案! jan – jan 2009-10-29 06:57:59

+0

是啊!沒問題。樂意效勞。 – jjnguy 2009-10-29 06:59:09

+1

實際上沒有必要爲此使用本地字段。你可以直接從'run'方法訪問'locale'變量。如果我的記憶不會使我失敗,那麼它將成爲編譯器添加的'Runnable'對象中的一個隱含字段。 – gustafc 2009-10-29 07:14:03

2

另一種選擇是使用靜態內部類。

public class MyClass { 

    public void someMethod() { 
     Runnable runnable = new MyRunnable(someLocaleHere); 
    } 

    private static class MyRunnable implements Runnable { 
     Locale locale = null; 

     private MyRunnable(Locale locale) { 
      this.locale = locale; 
     } 

     public void run() { 
     } 
    } 
} 

取決於你如何看待事物這種方法的缺點是MyRunnable無法訪問最後的局部變量喜歡這裏描述的其他技術。