매개 변수화 된 유형에 이상한 동작이 나타납니다. 클래스 B를 확장하는 클래스 A입니다. A에는 클래스 Predicate를 확장하는 내부 클래스 A1이 있습니다. 코드는 다음과 같다 : 매개 변수화 된 클래스 문제
public abstract class A<T> extends B<T> {
public T uniqueResult (String param, Object value) {
A1 filter = new A1();
filter.setParam(param);
filter.setValue(value);
return container.query(filter).next();
}
public class A1 extends Predicate<T> {
public boolean match (T bean) {
Object result = BeanUtils.getPropertyValue(bean, fieldName);
return result == null ? null : result.equals(value);
}
}
}
마지막 클래스 D는 확장 및에 uniqueResult 방법을 사용
public class D extends A<MyVO> {
public MyVO findById (BigDecimal id) {
return uniqueResult("id", id);
}
}
문제는 (A1 내부) 경기 방법 대신 MyVO의 BigDecimal를 수신한다는 것이다. D에서 uniqueResult 메서드를 재정의하면 제대로 작동하지만 왜 이런 일이 발생하는지 알 수 없습니다.
오버라이드에 uniqueResult은 다음과 같습니다
public MyVO uniqueResult (final String fieldName, final Object value) {
return container().query(
new Predicate<MyVO>() {
private static final long serialVersionUID = 1L;
public boolean match(MyVO bean) {
Object result = BeanUtils.getPropertyValue(bean, fieldName);
return result == null ? null : result.equals(value);
}
}
).next();
}
어떤 생각을?
'마지막으로 클래스 '- 클래스는 어디에 있습니까? 질문이 누락 된 것 같습니다 ... – Krease
죄송합니다. 부품이 누락 된 것 같습니다. –
'D '를 어떻게 정의하는지에 따라'uniqueResult'는'MyVO' 타입을 반환해야합니다 - 다른 것들 (B, A1)은'uniqueResult'의 리턴 타입에 영향을주지 않습니다. – Krease