问题的起因是在我使用 Spring 的BeanUtils.copyProperties
方法时发现两个 POJO 如果拥有相同的字段名,即使泛型类型不同,值也会被拷贝过去。例如类 A 有一个类型为List<Integer>
的字段 integerList,类 B 有一个类型为List<String>
的字段也叫 integerList,那么使用 BeanUtils.copyProperties(b, a)时,integerList 字段会被拷贝过去。这时我想起了 Java 的类型擦除问题。我想问:
public class InvokeDTO {
private List<Integer> integerList;
public List<Integer> getIntegerList() {
return integerList;
}
public void setIntegerList(List<Integer> integerList) {
this.integerList = integerList;
}
}
public static void main(String[] args) {
InvokeDTO invokeDTO = new InvokeDTO();
Method[] methods = invokeDTO.getClass().getMethods();
for (Method method : methods) {
try {
if (method.getName().equals("setIntegerList")) {
method.invoke(invokeDTO, Lists.newArrayList("string0", "string1"));
}
} catch (Exception e) {}
}
System.out.println(invokeDTO.getIntegerList());
}
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.