You did scare me there for a bit... :-) Sent from my iPhone
> On Jan 7, 2017, at 13:40, Matt Sicker <boa...@gmail.com> wrote: > > After all that, actually, I think I found a much simpler way to fix this > problem, and it allows for arbitrary ordering of the builder chain while > still working properly. The old factory methods just need to add a generic > signature as well: > > public static <B extends Builder<B>> MockAppender createAppender(...) { > return MockAppender.<B>newBuilder() > // ... > .build(); > } > > Anyways, that was a rather amusing string of generics in the gist. Oh well. > >> On 6 January 2017 at 22:31, Matt Sicker <boa...@gmail.com> wrote: >> So I've noticed that although everything compiles correctly, IntelliJ has >> difficulty understanding the generics going on in the hierarchy of builder >> classes. If you use methods from the parent in a chain, it returns the wrong >> class, though this doesn't really matter to the compiled code due to type >> erasure. >> >> However, after much experimentation, I have figured out a rather monstrous >> line of generics that works properly. Now bear with me as we explore the >> dark depths of Java generics and fluent DSLs. >> >> https://gist.github.com/jvz/dd499ccddfb6ffc0336fe0308e32b344 >> >> Yes, it looks absolutely ridiculous, but it avoids a lot of IDE problems and >> more explicitly lays out the expectations of the builders themselves. What >> do you think? >> >> -- >> Matt Sicker <boa...@gmail.com> > > > > -- > Matt Sicker <boa...@gmail.com>