我有以下要继承的Scala特征:
trait StreamTableSink[T] extends TableSink[T] {
/** Emits the DataStream. */
def emitDataStream(dataStream: DataStream[T]): Unit
}
延伸:
trait TableSink[T] {
private var fieldNames: Option[Array[String]] = None
private var fieldTypes: Option[Array[TypeInformation[_]]] = None
...
}
但是当我像Java一样继承它时:
public abstract class KafkaTableSink implements StreamTableSink<Row> {
...
}
我收到以下错误:
Error:(29, 8) java: kafka.KafkaAvroTableSink09 is not abstract and does not override abstract method TableSink$$fieldTypes_$eq(scala.Option<typeinfo.TypeInformation<?>[]>) in sinks.TableSink
其中KafkaAvroTableSink09
继承KafkaTableSink
答案 0 :(得分:1)
可能会出现两个问题。
1)由于使用占位符类型(下划线),java不知道给fieldTypes的类型。这可能会导致生成的fieldTypes_ $ eq方法变为抽象(请参阅here以查看为var生成的java代码)
2)如果scala traits具有任何实现细节,则无法在Java中进行扩展。
1应该通过给它一个显式类型来修复,并且可以通过将特性包装在类中以在Java中扩展来修复2。 (虽然2似乎不是你的问题,只是要注意的事情)