Improve type inference in SimpleCollector.Builder #86
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
I have tweaked some of the generics on
SimpleCollector
andSimpleCollector.Builder
in order to improve the type inference and compile-time guarantees when using builders. This should fix #65, but it actually also fixes an issue for Java users. Currently, the following code compiles, but fails at runtime with a ClassCastException:This is because the return types of
register
andcreate
are currently inferred at the call site, rather than being determined by the builder itself. I have therefore added a second type parameter to the builder, which is the type of collector it builds.I have also removed the second type parameter from
SimpleCollector
, since it was unused. I think the intention of this parameter was to use it as I am using the new builder type parameter, but since the builder classes are static this was not possible.This change breaks the API for anyone extending
SimpleCollector
, but since the documentation says "you should never need to subclass this class", I'm assuming this is not really an issue.