У меня сейчас есть проблема, которая привела меня к более общему вопросу, касающемуся Java и его механизмов наследования.
Существует абстрактный класс, который мне нужно расширить, который выглядит следующим образом:
public abstract class RichFlatMapFunction<IN, OUT> extends AbstractRichFunction implements FlatMapFunction<IN, OUT> {
private static final long serialVersionUID = 1L;
@Override
public abstract void flatMap(IN value, Collector<OUT> out) throws Exception;
}
Следовательно, в моей реализации я хочу (нужно) переопределить функцию flatMap()
. Мой собственный класс использует <Tuple2<GenericRecord,GenericRecord>, Tuple2<GenericRecord,GenericRecord>>
в качестве параметров IN и OUT.
Теперь я пытаюсь переопределить эту flatMap()
функцию, используя не интерфейс Collector<OUT>
, а реализацию этого интерфейса, которая выглядит следующим образом:
public class TupleWrappingCollector<IN, K> implements Collector<IN> {...}
Насколько я понимаю, я должен иметь возможность использовать этот класс вместо Collector<OUT>
, так как он выполняет этот интерфейс, требуемый функцией. Определение TupleWrappingCollector<Tuple2<GenericRecord,GenericRecord>, GenericRecord>
приведет к реализации интерфейса с Collector<Tuple2<GenericRecord,GenericRecord>>
, что именно то, что требуется для функции flatMap()
из исходного класса, и другого параметра GenericRecord
где-то в классе, что здесь не должно иметь значения. Тем не менее, при попытке определить заголовок метода я вижу ошибку следующим образом:
public void flatMap(Tuple2<GenericRecord,GenericRecord> value, TupleWrappingCollector<Tuple2<GenericRecord,GenericRecord>, GenericRecord> out) {...}
Не найдено метода, который можно переопределить, и класс требует, чтобы я указал flatMap()
функцию для Tuple2<GR,GR>, Collector<Tuple2<GR,GR>>
и я не понимаю почему. По моему мнению, я выполняю указанный заголовок метода.
Чего мне здесь не хватает, implements
дисквалифицирует класс, который я использую в качестве допустимого параметра, или у меня неправильный gr asp по сужению / расширению для интерфейсов?