我有以下接口(interface)实现:
package io.khinkali.topology;
import org.apache.kafka.streams.processor.*;
public class PathsProcessor<K, V> implements ProcessorSupplier {
@Override
public Processor get() {
return new Processor() {
private StateStore state;
@Override
public void init(ProcessorContext context) {
this.state = context.getStateStore("myProcessorState");
context.schedule(1000, PunctuationType.WALL_CLOCK_TIME, System.out::println);
}
@Override
public void process(K key, V value) {
}
@Override
public void close() {
}
};
}
}
编译器提示:
[error] /home/developer/Desktop/microservices/bary-paths-stream/src/main/scala/io/khinkali/topology/PathsProcessor.java:9:1: <anonymous io.khinkali.topology.PathsProcessor$1> is not abstract and does not override abstract method punctuate(long) in org.apache.kafka.streams.processor.Processor
[error] return new Processor<K, V>() {
[error] (compile:compileIncremental) javac returned non-zero exit code
[error] Total time: 2 s, completed Nov 21, 2017 9:46:47 AM
处理器如下所示:
public interface Processor<K, V> {
void init(ProcessorContext context);
void process(K key, V value);
@Deprecated
void punctuate(long timestamp);
void close();
}
我做错了什么?
最佳答案
方法:
@Deprecated
void punctuate(long timestamp);
即使已弃用,仍然需要实现。
编辑:已弃用仅意味着该方法不应在新代码中使用,因为计划将来删除它。该注释旨在警告开发人员这一事实。然而,只要该方法存在于接口(interface)中,它就必须由任何实现来实现。我同意这可能会令人困惑:您不应该使用该方法,同时您必须实现它。这就是开发者的生活。
关于java - 不是抽象的,不会覆盖抽象方法 punctuate(long),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47408901/