2014年8月27日 星期三

【Java】interface內的static參數(型別為物件,而不是基本數值型別)

挺奇妙的...

在interface內的參數會被強制宣告為final型態,因此boolean/byte/short/int/char/long/float/double/String這些基本型態的參數一旦寫在裡面,就會被「鎖死」不能再進行修改。

但如果這個參數直接是個類別(A)的實作物件(A),雖然不能修改物件(A)、不能重新宣告或指定新的物件(A),但物件(A)內的參數是可以修改的。

最明顯的例子就是就是宣告ArrayList<T>。

實作這個介面的物件依舊可以動態的、彈性的增減ArrayList<T>的內容。



更奇妙的是可以將這個ArrayList宣告為static屬性。

在多個不同(幾乎沒有相似性)的類別中實作帶ArrayList的介面後,修改、增加ArrayList的內容,然後看看內容組成,(只要看數量就夠了,)會發現ArrayList確實只被產生一次。(它是個綁在介面下的static參數,而不是綁在類別中。)



Android中,Service和Activity的關係一直困擾著我的地方是:Activity要如何對Service內的參數做出修正?或引用Service的屬性和函數?

直接掛上ServiceConnection當然是必要動作,但如果是Activity下所屬的Dialog呢?或是設計者將功能獨立成一個物件,為了能夠在多個Activity中使用,所以傳入參數只使用的基本Context?(好爛的例子......但大家應該懂我真正想表達的,其實就是一個問題:「萬一真的不行,萬一真的有必要另闢途徑,萬一我懶到不想這麼做、專案已經複雜到新增一個傳遞參數大家就會因為要修改舊程式碼而爆炸........有沒有別的選擇?」)

將參數打包成一個物件,然後用interface(I)包裝起來再丟給Service去實作/擴充...這樣一來凡是實作/擴充這個interface(I)的類別都可以享有Service下的參數讀取、甚至修改的權限。



我馬上想到的第一個想法就是設計一個ArrayList<Runnable>,任何被丟進去的Runnable都會被Service執行......當然要做基本的數量控制!......這樣就有簡單的「任務控制器」了。.......這概念大家都稱為「任務控制器」吧?

沒有留言:

張貼留言