Implicit 'this' return for void methods

Paul Benedict pbenedict at apache.org
Mon Mar 31 20:44:15 UTC 2014


What about opting in? By that, I mean that these void methods must have a
specific TYPE_USE annotation on them at compile time to allow chaining.

This idea would require a JLS update to allow type annotations on void
return values -- perhaps exclusive to this annotation.


On Mon, Mar 31, 2014 at 3:06 PM, Marek Kozieł <develop4lasu at gmail.com>wrote:

> Sorry for late answer,
>
> After some thought I came into conclusion, that both solutions are similar.
> For me void functionality it to great to be in 100% replaced, other
> reasons are not as important.
> So if we consider that void would be replaced with 'this' or keep as
> void, in additional some type would get void functionality and would
> be used as default return value instead of void. Then even with all
> confusion this change could be a little reasonable.
> void for static void mean next static call ?
>
> For me language should be incremental as much as possible for user as
> well for team.
> Use case 4 you:
> Team member changes void to other type.
> Difference between void and void as this is that when someone change
> this to other type a lot of work have to be done in order to prevent
> potential bugs, even when committed changes are checked  there no easy
> way to ensure validity of  all branches and uncommitted code.
>
> 2014-03-29 18:42 GMT+01:00 Victor Polischuk <victor2 at ukr.net>:
> >  --- Original message ---
> >  From: "Marek Kozieł" <develop4lasu at gmail.com>
> >  Date: 29 March 2014, 18:02:06
> >
> >> Main problem is fact that in long chain you cannot be sure if type
> >> changed and on which object you executing method. Now chain
> >> constructions are so rare that you remember them all.
> >> After such change every call could be considered to be chained so each
> >> code would required more analysis..
> >
> > Even the most simple or advanced tool can be misused. Builders usually
> mean extra layer which you need to support and adapt in case of underline
> object has changed. Moreover, just imagine the hell when every object has a
> proper builder in a separate class or additional methods to JavaBeans
> properties.
> >
> >> While change on void would bring multiple logic spaces take place in
> line:
> >> generate .writetofile.generatemore.sendbymail.savetostring...
> >
> > It looks like function composition and is already used in Stream API and
> many other places. I really cannot comprehend what is wrong with it.
> >
> >> I do not like looking at code from /good developer/ point of view, i
> >> like to look at language with question /how many time good developer
> >> time will be used to help weaker ones/
> >
> > Is that a problem to explain once for "weaker ones" that void methods
> now MAY be chained?
> >
> >> Don't get me wrong i like chains but not if language readability would
> >> suffer, that why i suggested return 'this' :
> >> http://mail.openjdk.java.net/pipermail/coin-dev/2009-March/000523.html
> >> But this change is not so easy to introduce.
> >
> > The change you propose cannot be applied to already compiled legacy code
> and therefore less useful. Java already has huge code database and
> rejecting the fact makes the feature unpopular. Imagine some people can
> desire something like:
> >
> > LOG.error("An error occurs: " + e.getMessage()).debug("Print stack
> trace: ", e);
> >
> > ----
> > Regards,
> > Victor Polischuk
>
>
>
> --
> Pozdrawiam
> Marek Kozieł ( Lasu )
>
> http://na-chlodno.blogspot.com/
> http://lasu2string.blogspot.com/
>



-- 
Cheers,
Paul



More information about the core-libs-dev mailing list