将类传递给函数

时间:2013-08-02 05:36:41

标签: groovy casting type-conversion

我想做类似以下的事情(琐碎的例子):

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

int x = f(int, "42")

如何在Groovy中执行此操作?

3 个答案:

答案 0 :(得分: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 :(得分:3)

Groovier的方式是使用Closure:

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

答案 2 :(得分:1)

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

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

int x = f(int, "42")