상황 : 5 월 필드는 내가 관찰하고자하는 모델의 속성 일 수 있습니다 (PropertyChangeListener와 비슷한). Field는 Enum으로 정의됩니다. 전화하기를 원합니다enum-method의 일반 반환 유형
someModel.getField(Field f).addObserver(FieldObserver<Something> observer)
옵저버의 유형 ("Something")은 필드에 따라 다르며 유형을 강제로 지정하고 싶습니다. 예를 들어 Field.FIRST_NAME
이면 FieldObserver< String>
이됩니다.
먼저 (작업) 방법 : 가 이미 대신 열거의 공공 정적 최종 필드 제네릭 클래스로 필드를 정의하여 도달 할 수있다. 내가 원하는 어떤 void addObserver(FieldObserver<? super E> observer)
이
이제 다음 줄은 컴파일 시간 오류가 발생, : 방법
public <E> Observable<E> getField(Field<? extends E> f)
Observable<E>
의 : 그래서 나는이 같은 유형의 안전을 강제하는 데 사용할 수있는 필드를 가지고 :
someModel.getField(Field.some_STRING_field).addObserver(INTEGERObserver)
초 (아직 작동하지 않는) 방법 : 나도 같은 동작을 구현하기 위해 지금 노력하고 있어요 enum 클래스를 사용합니다. 나의 접근 방식 중 하나입니다 : 모든 종류의 (또한 올바른 일)의 FieldObserver를 추가하려고
public enum Field{
FIRST_NAME("firstName") {
@Override
public Observable<String> getObservable() {
return new Observable<String>();
}
},...
//every Field must implement:
public abstract FieldObservable.Observable<?> getObservable();`
}
//getField(Field f) of the Model-class:
public Observable<?> getField(Field f){
return f.getObservable();
}
나에게이 같은 컴파일시 에러 제공 :
addObserver을 (enumer.FieldObserver < 캡처 < ? >>) 관찰 가능한에서에 을 적용 할 수 없습니다 (enumer.FieldObserver < java.lang.String의>)
사람이 어떻게 열거-접근 작업을 만드는 방법을 말해 줄래? 또한 누군가가 접근법에 대한 더 나은 해결책이나 우려가 있다면, 나는 그것을 듣고 감사하게 될 것입니다.
감사합니다 @AlexR. 케이스 1에 대한 예제를 제공해 주시겠습니까?나는 계속 "메소드가 슈퍼 클래스에서 메소드를 오버라이드하지 않는다"오류가 발생합니다. – husayt