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代码。如果答案对您有帮助,请确保“接受”它。