我正在尝试实现如下系统:
DtoMapper
:这是一个接口(interface),它定义了任何第三方映射器应返回对象的契约(Contract)
public interface DtoMapper<T> {
/**
* Converts list of T into FooResponse
* @param List of T
* @return FooResponse
*/
FooResponse convertToFooResponse(final List<T> rewards);
FooMapper
:实现DtoMapper
传递 Bar
的列表作为方法参数,但是编译器不喜欢我对方法实现的重写,并且需要第二个实现(底部)。
public final class FooMapper implements DtoMapper {
@Override
FooResponse convertToFooResponse(final List<Bar> listOfBars) {
... Logic
}
@Override
public convertToFooResponse(final List listOfBars) {
... I dont want this
}
如何使我的界面满足此要求,以便将来可以实现 public convertToFooResponse(final list<Snafu> listOfSnafus);
的另一个实现?
最佳答案
您需要明确实现DtoMapper<Bar>
而不是DtoMapper
.
示例:
public interface DtoMapper<T> {
/**
* Converts list of T into FooResponse
* @param List of T
* @return FooResponse
*/
FooResponse convertToFooResponse(final List<T> rewards);
}
public class FooMapperImplementation implements DtoMapper<Bar> {
@Override
public FooResponse convertToFooResponse(List<Bar> rewards) {
return null;
}
}
关于Java 通用接口(interface) List<T> 不接受对象类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39389240/