gpt4 book ai didi

java - 我如何将泛型与 commons beanutils 一起滥用?

转载 作者:行者123 更新时间:2023-12-02 07:57:00 24 4
gpt4 key购买 nike

我有两个简单的界面:

public interface HasId<ID extends Serializable> extends Serializable {
T getId();
}

public interface HasLongId extends HasId<Long> {
void setId(Long id);
}

现在,如果我有课:

public class Person implements HasLongId {
private Long id;
private String name;

public Long getId() {
return this.id;
}

public void setId(Long id) {
this.id = id;
}

public String getName() {
return this.name;
}

public void setName(String name) {
this.name = name;
}
}

我实例化了一个 person,然后将其传递给 BeanUtils 我得到了奇怪的行为。例如,有时使用 BeanUtils 设置 id 效果很好,而有时,我会收到异常,因为它找不到 Id 的“write”方法。似乎在反射过程中它找到了 Serialized 的 getter,但没有找到 Long,并且没有找到 Serialized 的 setter。它并没有一致地执行此操作,因此我怀疑调用 person.getClass().getDeclaredMethod("id") 并不总是返回相同的方法,但我可能是错的。

无论如何,这种不一致的行为确实令人抓狂,因为,例如,它可以在 Eclipse 中工作,但不能在 Maven 中工作,或者它将工作很长时间,然后在其他地方进行一些不相关的更改,它将停止工作。

显然我对泛型的理解还不够深入,无法理解正在发生的事情,但是任何人都可以向我解释它并解释如何解决它吗?

最佳答案

我使用的 Apache Commons BeanUtils 版本不支持 Java 5,因此它不了解泛型、桥接方法等。我相信这就是问题所在,您使用的是哪个版本的 BeanUtils?它支持 Java 5+ 吗?

关于java - 我如何将泛型与 commons beanutils 一起滥用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9492130/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com