如何从Scala中的泛型类型产生TypeInformation

时间:2019-05-13 10:03:40

标签: scala apache-flink flink-streaming

我正在尝试将DeserializationSchema扩展为具有通用类型的类

class Foo[T] extends DeserializationSchema[T] {
...
  override def getProducedType: TypeInformation[T] = TypeInformation.of(classOf[T])
}

但是我得到

  

类类型是必需的,但T发现覆盖def getProducedType:   TypeInformation [T] = TypeInformation.of(classOf [T])

任何想法

2 个答案:

答案 0 :(得分:0)

根据documentation

  

对于泛型类型,您需要“捕获”泛型类型信息   通过TypeHint:

所以您可以像这样编译它

class Foo[T] extends DeserializationSchema[T] {
...
  override def getProducedType: TypeInformation[T] = TypeInformation.of(new TypeHint[T]{})
}

答案 1 :(得分:0)

您可以要求隐式classOf作为T声明的一部分,而不是从TypeInformation[T]派生Foo

class Foo[T](implicit typeInformation: TypeInformation[T]) extends DeserializationSchema[T] {
  override def getProducedType: TypeInformation[T] = typeInformation

  override def deserialize(message: Array[Byte]): T = ???

  override def isEndOfStream(nextElement: T): Boolean = ???
}