2011-02-16 51 views
2

說我在一類只有靜態方法中有大量的Java靜態方法。它們都適用於某種類型的集合類。我如何掃描這個類,然後使用Groovy將它們中的每一個添加到相應的元類中?Groovy與Java的元編程

因此,一個樣品可能是這個樣子:

public class CollectionUtilities {  
    public static <T> T duplicates(Collection<T> coll) { 
     return // some code to isolate the duplicates 
    } 
} 

我想,要結束了,所以我可以打電話[1, 2, 2].duplicates() => [2]

Collection.metaClass.duplicates = { -> // replace coll usages with delegate } 

任何人做任何事情一樣這個?

任何想法的好方法去呢?

回答

1

你在正確的軌道與類別。您可以在本地使用類別,如您在回答中所示,或通過mixin在全球範圍內使用。

要在運行時您CollectionUtilities類的每一個方法添加到集合,你可以簡單地做到以下幾點:

Collection.mixin CollectionUtilities

0

我發現我可以使用「使用」關鍵字在類神奇地拉像這樣:

use(src.CollectionUtilities) { 
    [1, 2, 3, 3].duplicates() 
} 
=> [3] 

這更多的是一種蠻力技術,以及使用這些方法的代碼必須是包含在clojure,我不知道是否有一個更精確的方式來做到這一點......