The parameter of NullableAggregatorFactory is not the output selector type, it's the input selector type. So it should be BaseFloatColumnValueSelector for FloatFirstAggregatorFactory. The reason why this refactoring couldn't be done right now is that getCombiningFactory() returns an anonymous subclass of FloatFirstAggregatorFactory, that IMO wrong. It seems to me that it should be a separate class FloatFirstCombiningAggregatorFactory extends NullableAggregatorFactory<ColumnValueSelector<SerializablePair<Long, Float>>>
The parameter of NullableAggregatorFactory is not the output selector type, it's the input selector type. So it should be BaseFloatColumnValueSelector for FloatFirstAggregatorFactory. The reason why this refactoring couldn't be done right now is that getCombiningFactory() returns an anonymous subclass of FloatFirstAggregatorFactory, that IMO wrong. It seems to me that it should be a separate class FloatFirstCombiningAggregatorFactory extends NullableAggregatorFactory<ColumnValueSelector<SerializablePair<Long, Float>>>