groovy隐式函数参数类型转换

groovy隐式函数参数类型转换,groovy,Groovy,假设有这样一个方法:someAPI(Integer)。我有一节课 class MyClass{ int toInteger(){ 0 // just for demo. the value will be generated on the fly } public <T> T asType(Class<T> c){ 0 // just for demo. the value will be generated

假设有这样一个方法:
someAPI(Integer)
。我有一节课

class MyClass{

    int toInteger(){
        0 // just for demo. the value will be generated on the fly
    }


    public <T> T asType(Class<T> c){
        0 // just for demo. the value will be generated on the fly
    }
}

MyClass myClass
someAPI(myClass as Integer) // OK but it's more like groovy than DSL
someAPI(myClass) // This is what i want, but it gives me an error: method not found.
class-MyClass{
inttointeger(){
0//仅用于演示。将动态生成值
}
公共T型(c类){
0//仅用于演示。将动态生成值
}
}
我的班级我的班级
someAPI(myClass为整数)//可以,但它更像groovy而不是DSL
someAPI(myClass)//这是我想要的,但它给了我一个错误:找不到方法。

我怎样才能让groovy自动为我转换它?当然
someAPI()
不是我可以修改的。

类或接口中必须存在
someAPI
方法。假设该类或接口被称为
MyOtherClass
,则可以执行以下操作:

class MyOtherClass {
    void someAPI(Integer i) {println "I is $i"}
}

MyOtherClass.metaClass.someAPI = { i ->
    delegate.someAPI(i as Integer)
}


class MyClass {
    int toInteger() { 22 }
    def asType(Class c) { 22 }
}
现在,这是可行的:

// this prints "I is 52" as expected because Strings can be cast to Integers
new MyOtherClass().someAPI("52")

// prints "I is 22", which is what MyClass returns when cast to Integer
new MyOtherClass().someAPI(new MyClass())

// Integers will work as expected, prints "I is 77"
new MyOtherClass().someAPI(77)
我所做的是path类型的元类,它拥有
someAPI
方法,我想让它接受任何东西。。。注意,我添加了一个新的
someAPI
,它接受一个非类型化参数

我实现了新版本的
someAPI
,方法是在将参数转换为
Integer
后,将其委托给实际的实现,这正是您试图做的


当然,这只适用于Groovy代码。

如果答案对您有帮助,请确保“接受”它。