2013-08-02 71 views
0

我想要做类似下面的(简单的例子):传递类的功能

f(Class t, x) { x as t } 

int x = f(int, "42") 

如何在Groovy做到这一点?

+0

是任何回答适合接受的? – dmahapatro

回答

3

一个更巧妙的方式将是使用封闭:

f = {Class t, x -> x.asType(t)} 

assert f(int, "2") == 2 
assert f(float, "2") == 2.0f 
assert f(double, "2") == 2.0d 
assert f(Integer, "2") == 2 
assert f(Long, "2") == 2L 
assert f(BigDecimal, "2") == 2G 
3

假设你定义˚F作为一个类的方法,你可以这样做:

class F 
{ 
    static <T> T f(Class<T> outputClass, input) 
    { 
     input.asType(outputClass) 
    } 
} 

然后使用它通过调用

F.f(Integer, "42") 

如果你不关心泛型(尽管他们也应该帮助你的IDE拿起返回值是T型的),这也是有效的:

class F 
{ 
    static f(Class outputClass, input) 
    { 
     input.asType(outputClass) 
    } 
} 

assert F.f(Integer, "42").class == Integer 
1

只是为了完成你的代码示例:

def f(Class t, x) { x.asType(t) } 

int x = f(int, "42")