私は2つのシンプルなインターフェースを持っています:
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」メソッドが見つからないために例外が発生する場合があります。リフレクション中に、Serializableのゲッターは検出されますが、Longは検出されず、Serializableのセッターは検出されないようです。これは一貫して行われないため、person.getClass()。getDeclaredMethod( "id")を呼び出すと、常に同じメソッドが返されるとは限らないのではないかと思いますが、それについては間違っている可能性があります。
とにかく、この一貫性のない動作は本当に腹立たしいものです。たとえば、Eclipseでは機能しますがMavenでは機能しないか、長時間機能し、その後、他の場所で無関係な変更を加えると機能しなくなります。
明らかに、私はジェネリックを十分に理解していないので、何が起こっているのかを理解できませんが、誰かが私にそれを説明し、それを回避する方法も説明できますか?