Java Apache Beam的@ProcessElement方法是否必须为void类型?
Apache Beam @ProcessElement方法的返回类型问题
是否必须声明为void类型?
不需要。带@ProcessElement注解的方法支持多种返回类型,int、字符串、自定义类都可以,甚至还能返回集合(比如List<T>)。不过要注意:如果你的方法不需要把数据传到下一个Pipeline阶段(就像你说的只存内部数据库),返回的结果会被Beam直接忽略,不会进入下游处理。
非void返回类型有没有负面影响?
只要你不需要用返回值向下游传递数据,完全没问题,不会影响功能。唯一要留意的就是别返回太大的对象,避免额外内存开销——这属于通用代码优化,和Beam本身无关。
单元测试的简单实现方式
既然你想搞简单的输入输出验证,直接把方法改成返回需要验证的结果就行,比如把你示例里的代码改成这样:
@ProcessElement public String processData(ProcessContext context, @Element KV<String, TestItem> input) { String outputText; // 你的业务逻辑处理 ... return outputText; }
单元测试时,直接调用这个方法,传入模拟的ProcessContext和输入KV,然后断言返回的outputText是否符合预期就行,不用折腾Mockito Spy,简单直接。
补充说明
如果之后需要向下游输出数据,通常用context.output(...)方法就行,这时候方法返回void还是其他类型都不影响——Beam只认通过context.output发送的数据。
内容的提问来源于stack exchange,提问作者mattsmith5
相关产品推荐
相关产品推荐

