Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #26653

Re: can this be done with generics?

From Sebastian <news@seyweiler.dyndns.org>
Newsgroups comp.lang.java.programmer
Subject Re: can this be done with generics?
Date 2013-11-28 22:28 +0100
Organization albasani.net
Message-ID <l78ci7$2s0$1@news.albasani.net> (permalink)
References <slrnl9580s.42s.avl@gamma.logic.tuwien.ac.at> <l6ve31$4r8$1@newsreader4.netcologne.de> <bfhtunF18miU1@mid.individual.net> <slrnl9cftp.42s.avl@gamma.logic.tuwien.ac.at>

Show all headers | View raw


Am 27.11.2013 19:53, schrieb Andreas Leitgeb:
> Robert Klemme <shortcutter@googlemail.com> wrote:
>> public class Foo<T extends Foo<?>> {
>>       public T foo() { /* do stuff */ return self(); }
>>
>>       @SuppressWarnings("unchecked")
>>       protected final T self() { return (T) this; }
>>
>>       public static void main(String[] args) {
>>           new Baz<Baz<?>>().foo().baz().bar();
>>           new TheEnd().foo().last().baz().bar();
>>       }
>> }
>>
>> class Bar<T extends Bar<?>> extends Foo<T> {
>>       public T bar() { /* do stuff */ return self(); }
>> }
>> class Baz<T extends Baz<?>> extends Bar<T> {
>>       public T baz() { /* do stuff */ return self(); }
>> }
>
> Finally I got my head around it.
>
> This is f***ing brilliant && you're genious!
>
> For the extra win, my "source" of objects are really static factory methods,
> instead of "new"s, so the code on users' end now essentially looks like this:
>
>     getFoo().foo() /* compiler would correctly refuse .bar() or .baz() here */ ;
>     getBar().foo().bar() /* compiler would correctly refuse .bar() here */ ;
>     getBaz().foo().bar().baz(); /* all fine */
>
> It can't get any better than that.
>
> (In case it's already too long since I last said it: you're genious!)
>
> Thanks also to Patrick for his draft!
>

I'm late butting in this discussion, but this looks related to the 
"getThis() trick", see here:
http://www.angelikalanger.com/GenericsFAQ/FAQSections/ProgrammingIdioms.html#FAQ206

That explanation might help in understanding Robert's coding.

-- Sebastian

Back to comp.lang.java.programmer | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

can this be done with generics? Andreas Leitgeb <avl@gamma.logic.tuwien.ac.at> - 2013-11-25 00:55 +0000
  Re: can this be done with generics? Arne Vajhøj <arne@vajhoej.dk> - 2013-11-24 21:11 -0500
    Re: can this be done with generics? Saxo <jeti789@web.de> - 2013-11-25 01:43 -0800
      Re: can this be done with generics? Saxo <jeti789@web.de> - 2013-11-25 01:47 -0800
      Re: can this be done with generics? Arne Vajhøj <arne@vajhoej.dk> - 2013-11-26 21:32 -0500
    Re: can this be done with generics? Silvio <silvio@internet.com> - 2013-11-25 11:30 +0100
      Re: can this be done with generics? Saxo <jeti789@web.de> - 2013-11-25 02:36 -0800
      Re: can this be done with generics? Andreas Leitgeb <avl@gamma.logic.tuwien.ac.at> - 2013-11-25 10:45 +0000
      Re: can this be done with generics? Arne Vajhøj <arne@vajhoej.dk> - 2013-11-26 21:35 -0500
        Re: can this be done with generics? Silvio <silvio@internet.com> - 2013-11-27 10:48 +0100
        Re: can this be done with generics? Andreas Leitgeb <avl@gamma.logic.tuwien.ac.at> - 2013-11-27 10:18 +0000
  Re: can this be done with generics? Patrick Roemer <sangamon@netcologne.de> - 2013-11-25 12:59 +0100
    Re: can this be done with generics? Robert Klemme <shortcutter@googlemail.com> - 2013-11-25 22:31 +0100
      Re: can this be done with generics? Patrick Roemer <sangamon@netcologne.de> - 2013-11-26 12:03 +0100
      Re: can this be done with generics? v_borchert@despammed.com (Volker Borchert) - 2013-11-26 21:32 +0000
        Re: can this be done with generics? Robert Klemme <shortcutter@googlemail.com> - 2013-11-26 23:30 +0100
      Re: can this be done with generics? Andreas Leitgeb <avl@gamma.logic.tuwien.ac.at> - 2013-11-27 18:53 +0000
        Re: can this be done with generics? Sebastian <news@seyweiler.dyndns.org> - 2013-11-28 22:28 +0100
          Re: can this be done with generics? Andreas Leitgeb <avl@gamma.logic.tuwien.ac.at> - 2013-11-30 14:21 +0000
  Re: can this be done with generics? Mike Amling <mamling@chaff.us> - 2013-11-25 09:02 -0600
    Re: can this be done with generics? Andreas Leitgeb <avl@gamma.logic.tuwien.ac.at> - 2013-11-26 01:04 +0000
      Re: can this be done with generics? Robert Klemme <shortcutter@googlemail.com> - 2013-11-26 08:16 +0100
        Re: can this be done with generics? Andreas Leitgeb <avl@gamma.logic.tuwien.ac.at> - 2013-11-26 20:42 +0000
    Re: can this be done with generics? Arne Vajhøj <arne@vajhoej.dk> - 2013-11-26 21:38 -0500
      Re: can this be done with generics? Mike Amling <mamling@chaff.us> - 2013-11-27 11:05 -0600
  Re: can this be done with generics? taqmcg@gmail.com - 2013-11-25 08:36 -0800
    Re: can this be done with generics? taqmcg@gmail.com - 2013-11-25 09:04 -0800
      Re: can this be done with generics? Andreas Leitgeb <avl@gamma.logic.tuwien.ac.at> - 2013-11-26 00:50 +0000
        Re: can this be done with generics? Arivald <NOSPAMarivald@interia.pl> - 2013-11-26 07:10 +0100
          Re: can this be done with generics? Andreas Leitgeb <avl@gamma.logic.tuwien.ac.at> - 2013-11-27 18:58 +0000
  Re: can this be done with generics? Daniel Pitts <newsgroup.nospam@virtualinfinity.net> - 2013-12-07 09:04 -0800
    Re: can this be done with generics? Andreas Leitgeb <avl@gamma.logic.tuwien.ac.at> - 2013-12-07 19:20 +0000
      Re: can this be done with generics? Daniel Pitts <newsgroup.nospam@virtualinfinity.net> - 2013-12-10 11:14 -0800

csiph-web