【问题标题】:Java getConstructor(types) with parametised types具有参数化类型的 Java getConstructor(types)
【发布时间】:2012-08-23 22:34:46
【问题描述】:

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

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);

...但这不起作用。

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

【问题讨论】:

  • 在 Java "type erasure" 上查看此链接。另请参阅Reflecting generic types
  • 啊是的类型擦除,如果我对此进行了更多思考并实际阅读了 Eclipse 试图告诉我的内容,我可能会想出来!无论如何,谢谢你的链接。

标签: java generics reflection


【解决方案1】:

在运行时,这个:

  Map<String,Object>

实际上只是一个地图,没有任何参数。

打电话

 cls.getConstructor(Map.class) will be enough

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-26
      • 1970-01-01
      • 2011-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-29
      相关资源
      最近更新 更多