【问题标题】:How get method with List<SomeObject> as parameter using Reflection如何使用反射获取以 List<SomeObject> 作为参数的方法
【发布时间】:2014-02-28 15:09:11
【问题描述】:

我有

public void setContacts(List<PersonContact> contacts) {
    this.contacts = contacts;
}

需要使用反射来获取此方法,我已经尝试过

  clazz.getMethod("setContacts", ArrayList.class);

显示错误:

java.lang.NoSuchMethodException: model.person.Person.setContacts(java.util.ArrayList)

没错,方法签名是

    setContacts(List<PersonContact> contacts)

那么,如何在 getMethod 中传递正确的签名?

【问题讨论】:

  • 使用List.class。你为什么用ArrayList.class
  • 为什么需要对这个任务使用反射?只是好奇...
  • 应该如何区分setContacts(List&lt;PersonContact&gt; contacts)setContacts(List&lt;String&gt; contacts)(如果有这样的方法的话)。
  • @crush 这样的方法不能存在于同一个类中。他们将有相同的擦除。
  • @crush 我需要序列化为从数据库中检索的 JSON 对象,这些对象有列表,我不想序列化这些列表,我不能在 pojos 中使用 JsonIgnore 注释,以避免序列化过程中出现 LazyInitializationException,我只是将 null 设置为列表属性

标签: java reflection


【解决方案1】:

参数类型是java.util.List而不是java.util.ArrayList

clazz.getMethod("setContacts", List.class);

使用实际类很重要,因为您还可以使用 ArrayList 参数重载该方法

【讨论】:

  • 好的,它有效,我得到方法没有错误,但如果我尝试 method.invoke(personObject, null);显示错误:java.lang.IllegalArgumentException:我只想执行 setContacts(null);使用反射
  • @RodrigoRodrigues 将null 转换为Object
  • @RodrigoRodrigues - stackoverflow.com/questions/10087989/… 可能会帮助你
猜你喜欢
  • 1970-01-01
  • 2021-03-27
  • 1970-01-01
  • 2010-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-05
  • 1970-01-01
相关资源
最近更新 更多