使用Flink的returns方法时,为何需显式指定FlatMapFunction泛型类型?
FlatMapFunction强制转换的原因解析
核心根源:Java泛型类型擦除
Java编译后会擦除泛型的具体类型信息。当你用lambda表达式实现FlatMapFunction时,编译器没法从lambda本身推断出它的泛型参数(也就是输入的List<String>和输出的String)。而Flink的returns(TypeInformation<T>)方法必须明确知道输出的泛型类型T,才能生成正确的TypeInformation实例。
强制转换的实际作用
(FlatMapFunction<List<String>, String>)这个强制转换,就是给编译器明确指定lambda对应的泛型类型。这样编译器就能准确推断出returns方法需要的TypeInformation<String>类型参数,匹配到正确的方法签名。
移除后报错的原因
如果删掉这个强制转换,编译器无法确定lambda的泛型参数,也就没法推断returns方法里的T是什么类型,自然找不到符合要求的returns(TypeInformation<T>)方法,于是就会抛出Cannot resolve method returns(TypeInformation<T>)的编译错误。
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

