2013-11-22 134 views
0

我將使groovy API abit國際化。Groovy中類的方法別名

對於最終級的(例如字符串)

String.metaClass.вСтроку = {-> this.toString() } 

然而,這將創建附加閉合。用另一種方法沒有任何方法可以用alias方法嗎?

事情是這樣的:

String.metaClass.вСтроку = String.metaClass.&toString 
+0

什麼是創建一個額外的封閉問題? – Will

+0

將創建附加的java.class。如果我要將所有groovy API國際化,這不是最佳選擇。 – Archer

回答

2

你可以使用@Category變換這樣

@Category(String) class StringInternationalization { 
    String вСтроку() { 
     this.toString() 
    } 

    int длина() { 
     this.length() 
    } 
} 

class ApplyMixin { 
    static { 
     String.mixin(StringInternationalization) 
     final helloString = "Привет мир!" 
     println helloString.вСтроку() 
     assert helloString.длина() == helloString.length() 
    } 
} 

new Main() 

這將爲每個本地化類1個Category類和一個類應用所有混入變換(以註冊所有方法。)也應該更快,然後單獨關閉。

更多在這裏讀:http://groovy.codehaus.org/Category+and+Mixin+transformations

+0

謝謝。我將分析提議的應用程序並將回饋給您。 – Archer

+0

+1。擴展是一個很好的方法,因爲它們不需要'static {}'塊 – Will