我用參數化類型得到一個奇怪的行爲。 我是一個擴展類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方法,它工作正常,但我不明白爲什麼會發生這種情況。
的overrided 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