Groovy 将类传递给函数

Groovy 将类传递给函数,groovy,casting,type-conversion,Groovy,Casting,Type Conversion,我想做如下类似的事情(简单的例子): 在Groovy中如何做到这一点?假设您将f定义为类的方法,您可以执行以下操作: class F { static <T> T f(Class<T> outputClass, input) { input.asType(outputClass) } } 如果您不关心泛型(尽管它们也应该帮助您的IDE识别返回值的类型是t),这也可以: class F { static f(Class outp

我想做如下类似的事情(简单的例子):


在Groovy中如何做到这一点?

假设您将f定义为类的方法,您可以执行以下操作:

class F
{
    static <T> T f(Class<T> outputClass, input)
    {
      input.asType(outputClass)
    }
}
如果您不关心泛型(尽管它们也应该帮助您的IDE识别返回值的类型是t),这也可以:

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

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

一种更为常规的方法是使用闭包:

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

只需完成您的代码示例:

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

int x = f(int, "42")

是否有任何答案适合接受?
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
def f(Class t, x) { x.asType(t) }

int x = f(int, "42")