【发布时间】:2016-07-06 07:02:46
【问题描述】:
我想继承以下 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
【问题讨论】:
-
你可以只使用
fieldNames和fieldTypesvals' 而不是 vars'。 -
那个问题说的是
defs,不是vars,但是问题和解决方法是一样的。 -
@AlexeyRomanov 我不认为这是你提到的问题的重复。我对“def”没有任何问题,并且我成功地实现了抽象方法。我对 fieldTypes_$eq 方法有疑问,它似乎与我的“fieldTypes”变量有关。
-
vars 创建两个非抽象方法,因此您具有非抽象方法的特征,与链接问题中的完全相同。非抽象的vals 也会发生同样的情况。 -
@AlexeyRomanov 这是否意味着不可能用“var”s继承特征?
标签: java scala inheritance interop traits