我对参数化类型有一种奇怪的行为。我有一个扩展类 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 扩展 A 并使用 uniqueResult 方法:
public class D extends A<MyVO> {
public MyVO findById (BigDecimal id) {
return uniqueResult("id", id);
}
}
问题是匹配方法(A1 内部)接收 BigDecimal 而不是 MyVO。如果我覆盖 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();
}
任何的想法?