Java 7泛型重载编译模糊错误

时间:2016-03-17 02:29:45

标签: java generics compiler-errors overloading

我的代码中有一个变换器接口,用于将一个对象转换为另一个对象,或者将一个List转换为另一个列表。

public interface Transformer {
    <T, S> T transform(S source, Class<T> targetClazz, AfterPropertiesSetConverter<S, T> converter);
    <T, S> List<T> transform(List<S> source, Class<T> targetClazz, AfterPropertiesSetConverter<S, T> converter);    
}

实施:

public class DefaultTransformerImpl implements Transformer {
@Override
public <T, S> T transform(S source, Class<T> targetClazz,
        AfterPropertiesSetConverter<S, T> converter) {
    // use BeanCopier to copy object 
    // and use coverter object to do something else
}

@Override
public <T, S> List<T> transform(List<S> sources, Class<T> targetClazz,
        AfterPropertiesSetConverter<S, T> converter) {
    // do something
}

}

如果我像这样调用方法转换,

DefaultTransformerImpl.getInstance()
                .transform(dto, PerformanceVO.class, PerformanceDTO2PerformanceVOConverter.getInstance());

PerformanceDTO2PerformanceVOConverter是接口Converter的实现。 java 6和java 7编译器告诉我这是通过的! 但如果我这样称呼这个方法,

DefaultTransformerImpl.getInstance().transform(resList,
                            SalesPlanVO.class, null)

因为如果我不需要在复制bean之后做一些事情,我将使用null而不是Converter的实现。 传递java 6编译器,但java 7有编译错误,

  

错误:对两种方法的引用都是模糊的   变换(S#1,类,AfterPropertiesSetConverter)   在DefaultTransformerImpl和方法中   变换(列表,类,AfterPropertiesSetConverter)   在DefaultTransformerImpl匹配[错误]       T#1扩展了方法转换中声明的Object(S#1,Class,AfterPropertiesSetConverter)       S#1扩展了在方法转换中声明的Object(S#1,Class,AfterPropertiesSetConverter)       T#2扩展了方法转换中声明的Object(List,Class,AfterPropertiesSetConverter)       S#2扩展了在方法转换中声明的Object(List,Class,AfterPropertiesSetConverter)

我不明白使用null和使用对象作为最后一个参数有什么区别。

0 个答案:

没有答案