(I did not want to take over the other thread as I don't believe using
Scala case classes from Java is a solution to the posed problem.)

I've dabbled in Scala a bit but so far I've stayed away from using
named constructor parameters because it seems there is no way to
override the getters/setters later. Is that wrong?

What I do right now is make the parameter private, rename it and add
another property with the original name. That breaks any clients
relying on that name though. How do I get around that? I really want
to use those copy methods.

With kind regards
Ben

On 13 Okt., 00:15, Kevin Wright <[email protected]> wrote:
> You can't blame Scala for being flexible here!
> Seriously, if it wasn't so practical in so many scenarios, do you honestly
> think that people would be praising it quite as much as we do?
>
> Anyway, case classes with named+default parameters DO allow the builder
> pattern.  Mostly by making it obsolete through the copy method:
>
>   case class Node(x : Int = 0, y : Int = 0, z : Int = 0)
>
>   val n = new Node
>   val n1 = n copy (x = 1)
>   val n2 = n1 copy (y = 2)
>   val n3 = n2 copy (z = 3)
>
> or daisy-chain the calls:
>
>   val n4 = (new Node) copy (x = 1) copy (y = 2) copy (z = 3)
>
> It's not the way I'd recommend it though, you're better off using the named
> params directly:
>
>   val n5 = Node(
>     x = 1,
>     y = 2,
>     z = 3
>   )
>
> And do feel free to leave out any params you're not concerned about, they
> all have defaults:
>
>   val n6 = Node(
>     x = 1,
>     z = 3
>   )
>
>   val n7 = Node(
>     y = 2
>   )
>
> At this point, users of JavaFX script should be starting to feel an eerie
> sense of familiarity...
>
> On 12 October 2010 20:59, Casper Bang <[email protected]> wrote:
>
>
>
> > Wow, there's Scala again. Amazing how it somehow always sneaks in. As
> > to the topic at hand, I'd suggest submitting a request for
> > enhancement. The right people (Tulach etc.) can probably have this
> > done in a jiff with a check-box in the existing accessor wizard.
>
> > On Oct 12, 9:46 pm, Ricky Clarkson <[email protected]> wrote:
> > > Scala's case classes plus named arguments really solve this well,
> > > particularly if the calling code can be Scala too.
>
> > > case class Node(x: Float, y: Float)
>
> > > On Tue, Oct 12, 2010 at 8:42 PM, B Smith-Mannschott
>
> > > <[email protected]> wrote:
> > > > OK, so we've established that neither Eclipse nor Lombok will do what
> > > > the OP needs.  Are there any other alternatives?
>
> > > > I found myself needing something very similar only last week. In my
> > > > case, it was for a simple immutable value type (using Lombok's
> > > > lovely @Data) to which I wanted to add fluent builder style methods,
> > > > e.g.:
>
> > > > @Data
> > > > class Node {
> > > >  private final float x;
> > > >  private final float y;
> > > >  // Lombok generates getX(), getY(), but not setX(), setY()
> > > >  //   because x, y are final.
> > > >  // Lombok generates Node(float x, float y) constructor
> > > >  //   since x and y are final.
> > > >  Node withX(float x) {
> > > >    return new Node(x, y);
> > > >  }
> > > >  Node withY(float y) {
> > > >    return new Node(x, y);
> > > >  }
> > > > }
>
> > > > I ended up firing up emacs and defining a ad-hoc keyboard macro
> > > > to grind out the code for me. Yea! More boilerplate for the next
> > > > developer to wade through! huzzah!
>
> > > > How difficult would it be for someone inexperienced with Lombok's
> > > > internals to add something like this?
>
> > > > Stuff like this is why I'm glad there's more than just Java on the
> > > > JVM. For example, a Lisp (like Clojure) makes this kind of code
> > > > generation drudgery easy via its civilized [1] macro support.
>
> > > > [1] where uncivilized == the C preprocessor.
>
> > > > // Ben
>
> > > > On Tue, Oct 12, 2010 at 18:27, Reinier Zwitserloot <[email protected]>
> > wrote:
> > > >> project lombok can do this without cluttering up your code:
> > > >>http://projectlombok.org/(disclaimer:I'm a lombok developer). It
> > > >> works in both eclipse and netbeans (and the command line).
>
> > > >> Eclipse has built in support to generate these (in the source menu,
> > > >> "generate getters/setters"). I'm fairly sure netbeans has something
> > > >> similar, no plugins required. They do actually stick text in your
> > > >> source files that you then have to maintain, though, unlike Lombok.
>
> > > >> As far as I know none of these generate the 'return this' style
> > > >> setter, because that style of setter does not adhere to the bean
> > > >> standard.
>
> > > >> On Oct 12, 5:22 pm, Peter A Pilgrim <[email protected]> wrote:
> > > >>> Hi Everyone
>
> > > >>> May be even Tor can help.
>
> > > >>> Has anyone come across a name value pattern plugin for NetBeans or
> > > >>> Eclipse IDE?
> > > >>> Given a class like this:
>
> > > >>> class Node {
> > > >>>      private float x;
> > > >>>      private float y;
> > > >>>      private float z;
>
> > > >>> }
>
> > > >>> The plugin generates the accessors and builder chain mutators
>
> > > >>> class Node {
> > > >>>      private float x;
> > > >>>      private float y;
> > > >>>      private float z;
>
> > > >>>      public float getX() { return x; }
> > > >>>      public Node setX( float x ) { this.x = x; return this }
> > > >>>      public float getY() { return x; }
> > > >>>      public Node setY( float y ) { this.y = y; return this }
> > > >>>      public float getZ() { return z; }
> > > >>>      public Node setZ( float z ) { this.z = z; return this }
>
> > > >>> }
>
> > > >>> TIA
>
> > > >> --
> > > >> You received this message because you are subscribed to the Google
> > Groups "The Java Posse" group.
> > > >> To post to this group, send email to [email protected].
> > > >> To unsubscribe from this group, send email to
> > [email protected]<javaposse%[email protected]>
> > .
> > > >> For more options, visit this group athttp://
> > groups.google.com/group/javaposse?hl=en.
>
> > > > --
> > > > You received this message because you are subscribed to the Google
> > Groups "The Java Posse" group.
> > > > To post to this group, send email to [email protected].
> > > > To unsubscribe from this group, send email to
> > [email protected]<javaposse%[email protected]>
> > .
> > > > For more options, visit this group athttp://
> > groups.google.com/group/javaposse?hl=en.
>
> > --
> > You received this message because you are subscribed to the Google Groups
> > "The Java Posse" group.
> > To post to this group, send email to [email protected].
> > To unsubscribe from this group, send email to
> > [email protected]<javaposse%[email protected]>
> > .
> > For more options, visit this group at
> >http://groups.google.com/group/javaposse?hl=en.
>
> --
> Kevin Wright
>
> mail / gtalk / msn : [email protected]
> pulse / skype: kev.lee.wright
> twitter: @thecoda

-- 
You received this message because you are subscribed to the Google Groups "The 
Java Posse" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/javaposse?hl=en.

Reply via email to