我有两个简单的接口:
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;
}
}
我实例化 a person
,然后将它传递给BeanUtils
我得到奇怪的行为。例如,有时使用 BeanUtils 设置 id 工作正常,而其他时候,我得到一个异常,因为它找不到 Id 的“写入”方法。似乎在反射期间它找到了一个可序列化的吸气剂,但没有找到一个长的,它没有找到可序列化的设置器。它不会始终如一地这样做,所以我怀疑调用 person.getClass().getDeclaredMethod("id") 不会总是返回相同的方法,但我可能错了。
无论如何,这种不一致的行为确实令人抓狂,因为例如,它可以在 Eclipse 中工作,但不能在 Maven 中工作,或者它会工作很长时间,然后在其他地方进行一些不相关的更改,它就会停止工作。
显然,我对泛型的理解不足以理解正在发生的事情,但是任何人都可以向我解释它并解释如何解决它吗?