Общий интерфейс Java с List
DtoMapper
: это интерфейс, который определяет контракт, в котором любые сторонние сопоставители должны возвращать объекты как
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);
?
3 ответа
Вам необходимо явно реализовать 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;
}
}
Вы забыли параметризованный тип
class FooResponse{}
class First{}
class Second{}
public interface DtoMapper<T> {
FooResponse convertToFooResponse(final List<T> rewards);
}
class FirstMapper implements DtoMapper<First> {
@Override
public FooResponse convertToFooResponse(List<First> list) {
return null;
}
}
class SecondMapper implements DtoMapper<Second> {
@Override
public FooResponse convertToFooResponse(List<Second> list) {
return null;
}
}
При реализации класса вам необходимо передать общую спецификацию:
public final class FooMapper implements DtoMapper<Bar> {
// Here -----------------------------------------^
@Override
FooResponse convertToFooResponse(final List<Bar> listOfBars) {
... Logic
}
Похожие вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.