2016-09-21 98 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)