2016-09-21 32 views
1

我想爲類型爲Example的對象添加對類String的轉換。從字符串到某個對象的自定義類型轉換

當我做這樣的

class Example { 
    def x = 5 
} 

class ExampleConversionCategory { 
    static def support = String.&asType 
    static Object asType(String self, Class cls) { 
     if (cls == Example.class) { 
      "convert" 
     } else { support(cls) } // argument type mismatch 
    } 
} 

String.mixin(ExampleConversionCategory) 

def x = "5" as int 
println x 

我得到異常

java.lang.IllegalArgumentException: argument type mismatch 

問題是什麼? clsClass類型。

回答

3

你是相當接近...

注意,asType方法由Groovy的字符串擴展類實現的,稱爲StringGroovyMethods

使作品的代碼是這一個:

import groovy.transform.Canonical 
import org.codehaus.groovy.runtime.StringGroovyMethods 

@Canonical 
class Example { 
    def x = 5 
} 

class ExampleConversionCategory { 
    static final def convert = StringGroovyMethods.&asType 

    static def asType(String self, Class cls) { 
     if (cls == Example) new Example(x: 10) 
     else convert(self, cls) 
    } 
} 

String.mixin(ExampleConversionCategory) 

println "5" as int 
println 'A' as Example 

它打印:

5 
Example(10) 
相關問題