Apache Flink - 使用具有泛型类型参数的类

时间:2018-05-07 18:09:15

标签: java generics java-8 apache-flink

如何在flink中使用泛型类的类?我遇到了错误:

  

函数的返回类型' main(StreamingJob.java:63)'由于类型擦除,无法自动确定。您可以通过对转换调用的结果使用returns(...)方法来提供类型信息提示,或者让您的函数实现' ResultTypeQueryable'接口

我使用的课程形式为:

class MaybeProcessable<T> {
    private final T value;

    public MaybeProcessable(T value) {
        this.value = value;
    }

    public T get() {
        return value;
    }
}

我正在使用一个示例flink工作,如:

public static void main(String[] args) throws Exception {
    final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

    env.addSource(new PubSubSource(PROJECT_ID, SUBSCRIPTION_NAME))
        .map(MaybeProcessable::new)
        .map(MaybeProcessable::get)
        .writeAsText("/tmp/flink-output", FileSystem.WriteMode.OVERWRITE);

    // execute program
    env.execute("Flink Streaming Java API Skeleton");
}

现在我可以使用.returns()函数添加一个TypeInformation实例:

.map(MaybeProcessable::new).returns(new MyCustomTypeInformationClass(String.class))

但这需要我编写自己的序列化程序。有没有更简单的方法来实现这一目标?

1 个答案:

答案 0 :(得分:0)

你可以使用 .returns(TypeInformation.of(new TypeHint<MaybeProcessing<#CONCRETE_TYPE_HERE>>{})每次重复使用通用类型的MapFunction来设置返回类型,而不再创建自己的自定义类。