带有参数化类型的Java getConstructor(类型)

时间:2012-08-23 22:34:47

标签: java generics reflection

如果我有一个带有带参数泛型类型的构造函数的类:

public class Foo {
    public Foo(Map<String, Object> data) {
      ...
    }
}

...如果我想调用,我该如何引用该参数化Map:

Constructor constructor = cls.getConstructor(/*the Map class! */)

(其中cls是Foo类。)

我想做类似的事情:

Constructor constructor = cls.getConstructor(Map<String,Object>.class);

......但这不起作用。

我确信这有一个简单的答案!

2 个答案:

答案 0 :(得分:13)

在运行时,这:

  Map<String,Object>

实际上只是一张没有任何参数的地图。

致电

 cls.getConstructor(Map.class) will be enough

答案 1 :(得分:4)

您可以仅通过Map类型引用构造函数。通用参数将在运行时删除:

Constructor constructor = Foo.class.getConstructor(Map.class);